如何让我的 TCP 服务器不断接收数据?

How can I get my TCP server to constantly receive data?

我知道这是一个愚蠢的新手问题。然而,在 Internet 上,只有可怕的 TCP 服务器示例。像这样:

try {
    Socket skt = new Socket("localhost", 1332);
    BufferedReader in = new BufferedReader(new
    InputStreamReader(skt.getInputStream()));
    System.out.print("Received string: '");

    while (!in.ready()) {}
    System.out.println(in.readLine()); // Read one line and output it
    System.out.print("'\n");
    in.close();
} catch(Exception e) {
    System.out.print("Whoops! It didn't work!\n");
}

我如何让它处理多个客户端,并且还能够不断接收数据而不是仅仅关闭输入流?

互联网上没有容易找到的代码片段。

您显示的代码适用于 客户端,这是一个与服务器进行特定会话对话的应用程序。

对于服务器(如here),使用ServerSocket,您可以在其中输入特定的端口号。套接字监听端口,每次有人想要连接时都会创建一个连接。该连接是服务器与客户端通信的某种会话。

服务器的最小示例如下:

class TCPServer {

   public static void main(String argv[]) throws Exception {
         int port = 8081;
         ServerSocket waiting = new ServerSocket(port);

         while(true) {
            Socket socket = waiting.accept(); //wait until a client shows up
            new SessionHandler(socket).start();//create new handler with the socket
            //start listening again
         }
      }
}

所以你 运行 .accept 在一个 while 循环中,这样从你收到一个客户端连接的那一刻起,你就等待另一个。

SessionHandler

class SessionHandler extends Thread {

    private Socket socket;

    public SessionHandler (Socket socket) {
        this.socket = socket;
    }

    public void run () {
        //handle the session using the socket (example)
        BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
        DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
        //read input from inFromClient, write to outToClient
    }

}

现在在一个工业 TCP 服务器上,情况更复杂一些:您将使用 线程池 来防止服务器获得太多工作等。