要与多个客户端一起使用的ServerSocket我们为每个客户端附加单独的线程以便工作,但问题是连接工作正常并接受所有客户端但只提供最后一次连接。所以不是问题或者这是正常的。
服务器代码:
ServerSocket serverSocket=null;
Socket client;
System.out.println("Establishing Connection. Please wait...");
try{
serverSocket =new ServerSocket(58342);
System.out.println("Serever Started.");
}catch(Exception e)
{
System.out.println(e.getMessage());
}
while (true) {
try{
client = serverSocket.accept();
new ClientThread(client).start();
}catch(Exception e)
{
String err=e.getMessage();
if(err == null)
{
break;
}else{
System.out.println(e.getMessage());
}
}
}
ClientThread
public class ClientThread extends Thread{
private static Socket client;
private static String line="";
private static DataInputStream input = null;
private static DataOutputStream output = null;
public ClientThread(Socket serv)
{
try {
client =serv;
input=new DataInputStream(client.getInputStream());
output=new DataOutputStream(client.getOutputStream());
System.out.println("New Client Connected to port:"+
client.getPort());
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
答案 0 :(得分:4)
ClientThread
中的所有变量都是static
!!
这意味着它们在ClientThread
的所有实例中共享。因此,每次创建new ClientThread
时都会覆盖它们。
删除static
,你应该没问题。
在我看来,您可能需要阅读一些documentation。
答案 1 :(得分:0)
您必须在ClientThread的构造函数中执行I / O.
别。