多线程Socket聊天中来自一client的信息怎么发送给别的client?
怎么实现多线程的聊天程序服务器端,我现实做好了这样一个服务器端,主线程有ServerSocket在等待accept(),有client连接的时候就生成一个次线程,这个次线程才是处理client的交互
但是我现在有个不懂的地方是 比如:
当有多个client连接后,假设只有两个client 分别是client1 client2 怎么把client1发给 server的String 传给client2 ???? 我用了一些方法试图去实现,比如在次线程生成的时候把ServerSocket
.accept得到的socket放在一个Vector中,把这个Vector全部已经有的Socket都传进次线程,这样就能在client2中发信息给client1 ,但是没有成功啊
各位大大,还请指点.希望能给一个简单的程序出来啊,thanx in advance
问题点数:20、回复次数:8Top
1 楼hellwindy(夜神·月)回复于 2005-08-01 11:59:58 得分 1
server转发Top
2 楼williamy(williamy)回复于 2005-08-01 12:02:16 得分 0
但是我不知道怎么个转发过程,能不能搞一个程序上来 thanx in advanceTop
3 楼wnjer(WNJER)回复于 2005-08-01 14:22:37 得分 0
建一个全局的缓冲区(比如链表什么的)
然后将需要发送的信息(内容,目的地等)放入,然后各个线程来周期读取。
注意线程同步问题。
Top
4 楼williamy(williamy)回复于 2005-08-01 14:39:10 得分 0
这个方法我也想过,最开始就是想用一个全局的String 然后主线程中来一个while(true)去调用子线程输出这个String 但是我做不好, 还请各位帮我搞一个例子看看啊 谢谢先了Top
5 楼wangwwq(不开窍)回复于 2005-08-02 12:37:37 得分 0
首先你思路就不对,既然只是转发,需要的只是在 sayClient 上传的包中定义好包结构,包机构中包括接收方客户端的ip和端口就可以了,如果是对所有客户端群发,需要建立一个hashtable存储所有客户端注册的(ip地址-key,socket对象-value),这样的话就可以实现群发(遍历hashtable),单发(找对应的客户端key)就可以了。Top
6 楼wangwwq(不开窍)回复于 2005-08-02 13:03:54 得分 19
也就是你只要做3件事,1,client 链接的时候,存ip和socket入hashtable,client断开的时候清楚。2,接收client信息包的时候判断是否需要转发(一般在包头设标志),需要则存入一个vector。3,建立一个发送线程,轮训vector,vector中的每一条记录内都应该包含接收端的ip,根据hashtable的对应关系去找相应的socket下发消息。Top
7 楼williamy(williamy)回复于 2005-08-03 11:21:15 得分 0
wangwwq 说的有道理,我试下Top
8 楼star_str(生命火花)回复于 2005-08-03 12:40:49 得分 0
可以从服务器组播Top




