gpt4 book ai didi

java - 如何让我的 TCP 服务器持续接收数据?

转载 作者:行者123 更新时间:2023-12-01 11:51:13 24 4
gpt4 key购买 nike

我知道这是一个愚蠢的新手问题。然而,在互联网上,只有可怕的 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");
}

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

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

最佳答案

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

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

服务器的最小示例如下:

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
}
}
}

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

作为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 服务器上,情况确实有点复杂:您将使用线程池来防止服务器承担过多的工作等。

关于java - 如何让我的 TCP 服务器持续接收数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28809031/

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