没有做个相关的东西,但可以给你分析一下。
群聊的过程:服务器为S,在线用户为A、B、C,A发信息a是先发到服务器S中,然后服务器S查看群中在线用户B、C,然后把信息a发给B、C,这样就完成了群聊的过程。
具体实现可以根据单对单时的实现来实现,A->S,S->B,S->C这样来实现。这里我只能这样分析而已,下面的时间留给大牛们来吧!
群聊的过程:服务器为S,在线用户为A、B、C,A发信息a是先发到服务器S中,然后服务器S查看群中在线用户B、C,然后把信息a发给B、C,这样就完成了群聊的过程。
具体实现可以根据单对单时的实现来实现,A->S,S->B,S->C这样来实现。这里我只能这样分析而已,下面的时间留给大牛们来吧!
解决方案 »
- 初学者问题:关于bean中的property
- 关于接口的作用
- Axis做服务,怎么用 handler 截获信息和 server-config.wsdd 是如何进行配置
- [分享]清华计算机讲义大全! 编译原理,操作系统(1,2),数据结构(1,2,3,4),网络,微机原理
- 谁知道TextLayout这个类是用作干什么的
- 菜鸟的简单问题
- 请问大虾在sco unix5.05下,数据库informix,WEB服务用tomcat3.0的JDBC驱动有否?
- 请教:如何控制JTextField的输入字符个数,比如只准输入三个字符,光标不能再向右移动了。
- 请教 急急急
- 请问哪儿有JBuilder5.0、6.0下载(不在boland)上。
- 如何使用urlConnection循环请求一个server的servlet,雪地里跪等。
- 为什么被拷贝的二维数组打印不出来了?在线等!
让S分别找到所有的SOCKET,然后一一把消息发送出去,但是这样做不知道为什么不成功,没刷新出去,我用了flush这个方法了,各位大虾请赐教。。
一般都是使用udp做。只有必须使用tcp是才使用tcp,如传文件。
而且server只是处理一些必须是server处理的事,例如谁连接进来了,群聊消息转发。client之间的聊天,都是client对client,这样可以减轻server的负担。
然后每个成员发言时,发送对象是组,服务器负责把消息发给组内的每个人。OVER
BufferedReader br=null;
//DataInputStream in=new DataInputStream(s.getInputStream());
PrintWriter pw=null;
try{
InputStream is=s.getInputStream();
br=new BufferedReader(new InputStreamReader(is));
String temp=br.readLine();
while(temp!=null){
if(temp.equals("close")){
System.out.println("Connection close@"+s.getLocalAddress());
ChatServer.num--;
System.out.println("user num is: "+ChatServer.num);
ChatServer.list.remove(s);
return;
}else{
System.out.println(s.getLocalAddress()+" say: "+temp);
for(Iterator it=ChatServer.list.iterator();
it.hasNext();){
Socket s1=(Socket)it.next();
OutputStream os=s1.getOutputStream();
pw=new PrintWriter(os,true);
pw.println(s1.getLocalAddress()+" say: "+temp); }
temp=br.readLine();
}
}
这个是服务器的转发消息的线程,很简单
通过服务器遍历保存好的socket 然后获取输出流 转发 就行