java socket一对多通信如何实现?
现在有一个服务器端,多个客户端,每当一个客户端接入服务器端的时候,服务器端就建立一个线程。现在问题,当服务器端发送消息的时候,只有一个客户端接受到了信息,其他连接到的客户...
现在有一个服务器端,多个客户端,每当一个客户端接入服务器端的时候,服务器端就建立一个线程。
现在问题,当服务器端发送消息的时候,只有一个客户端接受到了信息,其他连接到的客户端没有反映。 展开
现在问题,当服务器端发送消息的时候,只有一个客户端接受到了信息,其他连接到的客户端没有反映。 展开
3个回答
展开全部
【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();
}
}
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();
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
服务器端发送消息,你要知道给哪个客户端发,应该是将所有的客户端连接都放在数组里,然后遍历数组发送
参考下吧: http://wenku.baidu.com/view/a9598469c5da50e2524d7f82.html
参考下吧: http://wenku.baidu.com/view/a9598469c5da50e2524d7f82.html
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看看是不是线程被锁住了,比如socket.read(),最好是一个连接用独立的线程,这样不会相互影响
追问
我发现原因是每次服务器写的线程都是在和另一个客户端单独建立的线程中进行的,所以处于其他线程的客户端就没办法收到消息了。要所有客户端都能收到服务端的同样的消息,怎么办?现在每个连接是单独的一个线程,导致消息通道都是独立的了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询