java socket一对多通信如何实现?

现在有一个服务器端,多个客户端,每当一个客户端接入服务器端的时候,服务器端就建立一个线程。现在问题,当服务器端发送消息的时候,只有一个客户端接受到了信息,其他连接到的客户... 现在有一个服务器端,多个客户端,每当一个客户端接入服务器端的时候,服务器端就建立一个线程。
现在问题,当服务器端发送消息的时候,只有一个客户端接受到了信息,其他连接到的客户端没有反映。
展开
 我来答
孤独的探戈1573
推荐于2018-05-14 · TA获得超过580个赞
知道小有建树答主
回答量:238
采纳率:0%
帮助的人:156万
展开全部
【server端】

import java.io.*;
import java.net.*;
public class MultiSocketServer
{
public static void main(String str[]) throws IOException
{
ServerSocket server=new ServerSocket(3333);//绑定端口
while(true)
{
Socket client=server.accept();//监听
ChildTh child=new ChildTh(client);
Thread t=new Thread(child);
t.start();
}
}
}
class ChildTh implements Runnable
{
private Socket client;
public ChildTh(Socket client)
{
this.client=client;
}

public void run() {
try
{
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream());
while(true)
{
String s=in.readLine();
System.out.println(s);
out.println("has received……");
out.flush();
if(s.equals("end"))
break;
}
client.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
【client端】
import java.net.*;
import java.io.*;
public class MultiSocketClient
{
static Socket server;
public static void main(String str[]) throws IOException
{
server=new Socket("222.195.151.47",3333);
BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream()));
PrintWriter out=new PrintWriter(server.getOutputStream());
BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));
while(true)
{
String s=wt.readLine();
out.println(s);
out.flush();
if(s.equals("end"))
{
break;
}
System.out.println(in.readLine());
}
server.close();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xj黑面书生
推荐于2016-01-20 · 超过27用户采纳过TA的回答
知道答主
回答量:80
采纳率:0%
帮助的人:44.3万
展开全部
服务器端发送消息,你要知道给哪个客户端发,应该是将所有的客户端连接都放在数组里,然后遍历数组发送
参考下吧: http://wenku.baidu.com/view/a9598469c5da50e2524d7f82.html
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a30501139
2015-04-08 · TA获得超过172个赞
知道小有建树答主
回答量:523
采纳率:0%
帮助的人:253万
展开全部
看看是不是线程被锁住了,比如socket.read(),最好是一个连接用独立的线程,这样不会相互影响
追问
我发现原因是每次服务器写的线程都是在和另一个客户端单独建立的线程中进行的,所以处于其他线程的客户端就没办法收到消息了。要所有客户端都能收到服务端的同样的消息,怎么办?现在每个连接是单独的一个线程,导致消息通道都是独立的了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式