如何让我的 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 服务器上,情况更复杂一些:您将使用 线程池 来防止服务器获得太多工作等。
我知道这是一个愚蠢的新手问题。然而,在 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 服务器上,情况更复杂一些:您将使用 线程池 来防止服务器获得太多工作等。