Java套接字:一个服务器和多个客户端

所以我在java中创建了一个基本的客户端 – 服务器程序.它开头是这样的:

>客户端连接到服务器
>服务器要求客户的名称
>客户响应姓名
>服务器迎接客户端
>在此之后,客户端说话,服务器重复这些话

我使用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循环.您需要创建一个新线程(如果您期望高负载,则在ExecutorService上执行Runnable),然后启动它,然后立即接受下一个连接.

转载注明原文:Java套接字:一个服务器和多个客户端 - 代码日志