gpt4 book ai didi

Java 套接字 : One Server and Multiple Clients

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:09:57 24 4
gpt4 key购买 nike

所以我用 java 创建了一个基本的客户端-服务器程序。它开始是这样的:

  1. 客户端连接到服务器
  2. 服务器询问客户的名字
  3. 客户回复姓名
  4. 服务器问候客户
  5. 在此之后,客户端说话,服务器重复这些话

我使用 this tutorial 没有太多麻烦就让它工作了.每当我尝试介绍多个客户时,问题就会出现。我认为它会工作,因为我使用的是多线程,但是,第二个客户端只是挂起,直到第一个客户端退出然后它开始工作(服务器确实接受来自第二个客户端的输入,但它没有响应直到第一个客户退出。

这是我使用的代码:

import java.net.*;
import java.io.*;

public class Server extends Thread {
private ServerSocket listener;

public Server(int port) throws IOException {
listener = new ServerSocket(port);
}

public void run() {
while(true) {
try {
Socket server = listener.accept();
DataOutputStream out = new DataOutputStream(server.getOutputStream());
out.writeUTF("What is your name?");
DataInputStream in = new DataInputStream(server.getInputStream());
String user_name = in.readUTF();
out.writeUTF("Hello "+user_name);
while(true) {
String client_message = in.readUTF();
out.writeUTF(client_message);
}
}
catch(IOException e) {
e.printStackTrace();
}
}
}

public static void main(String[] args) {
int port = 6006;
try {
Thread t = new Server(port);
t.start();
} catch(IOException e) {
e.printStackTrace();
}
}
}

有人可以解释我做错了什么吗?

我看过使用 Runnable 而不是 Extends Thread,但我在那里遇到了更多问题,所以我想先尝试使用它。

最佳答案

传入连接仅由 listener.accept(); 行处理。但是在你连接了一个客户端之后,你就陷入了 while 循环。您需要创建一个新的 Thread(或者如果您期望高负载,则在 ExecutorService 上执行的 Runnable),然后启动它,然后 立即接受下一个连接。

关于Java 套接字 : One Server and Multiple Clients,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18582708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com