当前位置:首页 > 第四阶段 实现多人聊天
第四阶段 实现多人聊天 任务
让每个用户可以自由的和多个好友同时聊天。
思路
客户端每个QQ号码登录成功,均用一个线程来保持与服务器的通讯,并写一个类来专门管理这些线程。(将之前登录创建的线程的静态属性去掉),写一个专门管理聊天界面的管理类,用来保证服务端转发聊天信息到正确的聊天界面。
完成步骤
客户端:
1. 将客户端发送QQ登陆验证的类QqClientConnServer.java中的socket属性去掉 static属性。 2. 在tools包中:
(1)写一个线程类(ClientConnServerThread.java),用来使客户端与服务器保持通信,接收服务器转发的聊天信息。
在QqClientConnServer.java类中,登陆验证完毕后。 创建一个该QQ号和服务器端保持通讯连接的线程
ClientConnServerThread ccst=new ClientConnServerThread(s); 启动该线程 ccst.start();
将该线程添加到其管理类(2)类中去。
?ManageClientConnServerThread .addClientConnServerThread(((User)o).getUser(), ccst); (2)写一个类(ManageClientConnServerThread),用来管理客户端与服务器保持通信线程的类:创建哈希表
3. 去掉QqChat.java类中QqChat为线程类的这一设计(去掉implements runnable,相应去掉 run()方法)。
4. 在QqChat.java单击“发送”聊天消息包事件处理中,修改用于发送聊天消息包时所使用的socket的获取途径:
ObjectOutputStream oos=new ObjectOutputStream (ManageClientConnServerThread.getClientConnServerThread(userNo).getS().getOutputStream());
5. 注释掉好友列表类中启动聊天界面线程的代码。(已经呈报错状态,容易找到)
★ 接下来解决客户端(在客户端创建的保持与服务器聊天的线程
ClientConnServerThread.java中)如何将从服务器读取到的Message显示到正确的聊天界面中。
★ 思路:因为一个QQ用户可能同时打开了多个与好友的聊天窗口,接收到的包到底
显示在与哪个好友的聊天界面中,就需要获得与哪个好友聊天的界面,因此需要设计一个管理类,专门管理所有的聊天界面,而loginId+FriendId的组合能唯一确定一个聊天界面)。
6.在com.qq.client.tools包中,写一个管理聊天界面的类ManageQqChat.java:
写一个方法,添加聊天界面
addQqChat(String loginIdAndFriendId,QqChat qqChat) 写一个方法,获取聊天界面
QqChat getQqChat(String loginIdAndFriendId)
7. 在QqFriendList.java类中,双击某好友启动和某好友聊天界面时,即将聊天界面加入到其管理类中。
8. 在ClientConnServerThread.java类中,把从服务器获得的消息,显示到该显示的聊天界面。(在QqChat.java中写一个方法,让它显示Message)
共分享92篇相关文档