尝试在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端口。您应该有一个线程接受(多个客户端请求在该端口排队),然后您可以生成一个新线程来处理每个接受的连接
见: