多线程Socket聊天中来自一client的信息怎么发送给别的client?

williamy 2005-08-01 11:49:19
怎么实现多线程的聊天程序服务器端,我现实做好了这样一个服务器端,主线程有ServerSocket在等待accept(),有client连接的时候就生成一个次线程,这个次线程才是处理client的交互
但是我现在有个不懂的地方是 比如:
当有多个client连接后,假设只有两个client 分别是client1 client2 怎么把client1发给 server的String 传给client2 ???? 我用了一些方法试图去实现,比如在次线程生成的时候把ServerSocket
.accept得到的socket放在一个Vector中,把这个Vector全部已经有的Socket都传进次线程,这样就能在client2中发信息给client1 ,但是没有成功啊
各位大大,还请指点.希望能给一个简单的程序出来啊,thanx in advance
...全文
245 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
star_str 2005-08-03
  • 打赏
  • 举报
回复
可以从服务器组播
williamy 2005-08-03
  • 打赏
  • 举报
回复
wangwwq 说的有道理,我试下
wangwwq 2005-08-02
  • 打赏
  • 举报
回复
首先你思路就不对,既然只是转发,需要的只是在 sayClient 上传的包中定义好包结构,包机构中包括接收方客户端的ip和端口就可以了,如果是对所有客户端群发,需要建立一个hashtable存储所有客户端注册的(ip地址-key,socket对象-value),这样的话就可以实现群发(遍历hashtable),单发(找对应的客户端key)就可以了。
wangwwq 2005-08-02
  • 打赏
  • 举报
回复
也就是你只要做3件事,1,client 链接的时候,存ip和socket入hashtable,client断开的时候清楚。2,接收client信息包的时候判断是否需要转发(一般在包头设标志),需要则存入一个vector。3,建立一个发送线程,轮训vector,vector中的每一条记录内都应该包含接收端的ip,根据hashtable的对应关系去找相应的socket下发消息。
williamy 2005-08-01
  • 打赏
  • 举报
回复
但是我不知道怎么个转发过程,能不能搞一个程序上来 thanx in advance
全粘架构师 2005-08-01
  • 打赏
  • 举报
回复
server转发
williamy 2005-08-01
  • 打赏
  • 举报
回复
这个方法我也想过,最开始就是想用一个全局的String 然后主线程中来一个while(true)去调用子线程输出这个String 但是我做不好, 还请各位帮我搞一个例子看看啊 谢谢先了
wnjer 2005-08-01
  • 打赏
  • 举报
回复
建一个全局的缓冲区(比如链表什么的)
然后将需要发送的信息(内容,目的地等)放入,然后各个线程来周期读取。

注意线程同步问题。

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧