A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周刚 中级黑马   /  2012-7-9 19:20  /  1557 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Socket多线程+awt/swing 能实现QQ聊天,通常做的是群聊,怎样实现私聊呢?

5 个回复

倒序浏览
能不能为不同的通话者指定不同的端口呢?就是在聊天之前先建一个用于约定端口的专用socket.先使用该socket前确定双方的状态,比如A有闲置端口10005,B有闲置端口10006,
双方各自将自己的闲置端口发到对方那里,然后双方再根据对方的端口设立聊天所用的socket对象.当然,自己最好弄一个端口计数器,比如从int portNum=10000; portNum++这样顺延.
或许为了程序的健壮性,还要对指定端口进行小测试,万一指定端口被占用了怎么办..
好像很麻烦,但是如果测试数据量小的话,还是一瞬间的事情啦.
回复 使用道具 举报
通常的小测试程序都是在自己的机器上运行的啊
ip地址一样,端口一样,在实际中很少有人在自己的机器上登着两个QQ自己和自己聊天吧……。
即使是这样,那么发送的数据包中也必须包含有区别不同用户的标记
像不同用户拥有不同的id,用户名之类的,只要在发送的数据里添加上这些东西,
然后在接收的方法中判断是否是发送给该用户的消息不就可以了么
回复 使用道具 举报
可以这样来做,把服务端做成一个信息的中转站,所有的信息,先依次发到服务器,然后在服务器把信息发到各客户机的时候用ip做条件,用于保证只发送到指定客户机!
回复 使用道具 举报
对应的不同的会话设置不同的端口,可以借助对方IP来实现端口的选择,然后服务器与客户端之间只通过唯一的接口(因为有IP标示)传输数据,即实现私聊
回复 使用道具 举报
本帖最后由 haiyualong 于 2012-7-12 15:43 编辑

像楼上所说的,做一个服务器来接收客户端的信息,然后再将信息转发给目标客户端,这样实现起来比较简单。服务器只需要等待客户端来主动连接,然后保存下代表该条连接的socket,而不用去考虑客户端的IP地址以及端口的情况,只要服务器的IP地址以及端口号固定就行。服务器要发送消息给客户端,只要将消息数据写入到相应的与服务器已建立连接的那个客户端的socket输出流就可以了。每个消息都应该是一个序列化的消息对象,在消息对象里有代表着接收端的信息的这样的成员变量,服务器接收到发送端发来的信息后,根据消息对象里面的代表接收端的那个成员变量来得知将信息发送到那个目标客户端。如果将服务器端的转发目标变成多个客户端,那这条消息就变成了群发了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马