Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在Java中创建多个客户端服务器?_Java_Sockets - Fatal编程技术网

尝试在Java中创建多个客户端服务器?

尝试在Java中创建多个客户端服务器?,java,sockets,Java,Sockets,由于某种原因,当我运行服务器代码时,服务器窗口会弹出,但随后它会冻结,不允许我做任何事情。我已经用我的代码进行了实验,似乎while循环是个问题,因为当我删除它时,它工作得很好。但是我需要while循环来服务许多客户机。代码如下: 注意:变量numClients已在其他地方初始化和实例化 try{ ServerSocket serverSocket = new ServerSocket(8000); textArea.append("Server start

由于某种原因,当我运行服务器代码时,服务器窗口会弹出,但随后它会冻结,不允许我做任何事情。我已经用我的代码进行了实验,似乎
while
循环是个问题,因为当我删除它时,它工作得很好。但是我需要
while
循环来服务许多客户机。代码如下:

注意:变量
numClients
已在其他地方初始化和实例化

  try{

        ServerSocket serverSocket = new ServerSocket(8000);
        textArea.append("Server started on " + new Date() + "\n");          

        while(numClients <= 5){

         Socket socket = serverSocket.accept();

         InetAddress inetAddress = socket.getInetAddress();

             textArea.append("Client \"" + inetAddress.getHostName() + "\" has                          
                             connected!");
         textArea.append("The IP address of \"" + inetAddress.getHostName() +     
                         "\" is   " + inetAddress.getHostAddress());    

         HandleClient task = new HandleClient(socket);
         new Thread(task).start();

         numClients++;

    }
}
catch(IOException ex){
    ex.printStackTrace();
}   
试试看{
ServerSocket ServerSocket=新的ServerSocket(8000);
extarea.append(“服务器在“+新日期()+”\n”)启动;

while(numClients方法调用:
serverSocket.accept()
正在阻塞,这意味着它将停止当前线程,直到有人连接。这意味着如果在读取输入的同一线程中执行,则不会收到用户输入

这意味着如果没有
while
循环,您将收到一个连接并离开此代码, 但是使用
while
循环,您将继续阻塞和接收新连接


要解决问题,您需要在单独的线程上运行
while
循环。

调用
Socket=serverSocket.accept()
线程“阻塞”直到它接收到连接的
套接字。由于GUI和
套接字包含在同一个线程中,GUI看起来没有响应


您要做的是研究线程并在GUI的单独线程中运行连接接受代码。这样,您的GUI将保持独立于
Socket
线程,并且在
Socket
等待连接时不会被阻止。

您不应该尝试让多个线程在s上接受连接ame端口。您应该有一个线程接受(多个客户端请求在该端口排队),然后您可以生成一个新线程来处理每个接受的连接

见: