java - 具有多客户端的 ServerSocket

标签 java serversocket tcpserver

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());
                    }
                }

        }

客户端线程

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());
            }       
    }
}

最佳答案

ClientThread 中的所有变量都是静态!!

这意味着它们ClientThread的所有实例之间共享。因此,每次创建新的 ClientThread 时,它们都会被覆盖。

删除static,你应该没问题。

在我看来,您可能需要阅读一些内容 documentation .

关于java - 具有多客户端的 ServerSocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16137130/

相关文章:

java - 我无法选择 Jcombobox 中的值

Java套接字系统地址

java - 套接字输入流在流末尾不返回 -1

java - 通过 tcp 命令关闭 Jacoco Java 代理

java - Hibernate缓存锁定错误

java - Java Interposer 中的堆栈粉碎

java - DrawerLayout 的背景变暗

Java Server Socket绑定(bind)多个域名/主机名

ruby - 使用 TCPServer 的 Ruby 中的简单 HTTP 服务器