📅  最后修改于: 2023-12-03 15:02:05.494000             🧑  作者: Mango
ServerSocket
类在Java中,ServerSocket
类用于创建TCP服务器,它等待来自客户端的连接请求,并在连接请求到达时执行一系列操作。该类相当于服务器的“监听器”,可以监听特定的端口号以接收连接请求。下面将对ServerSocket
类进行详细介绍。
ServerSocket
要创建一个ServerSocket
对象,可以使用以下代码:
try {
ServerSocket serverSocket = new ServerSocket(port);
// 处理连接请求
} catch (IOException e) {
e.printStackTrace();
}
其中,port
是要监听的端口号。在创建ServerSocket
时,如果指定的端口已被占用,程序将抛出BindException
异常。因此,在创建ServerSocket
时应该放在一个try
..catch
块中,并处理可能的异常。
当ServerSocket
对象开始监听端口时,它会等待来自客户端的连接请求。当连接请求到达时,ServerSocket
会创建一个新的Socket
对象来处理该请求,然后返回原始的ServerSocket
对象。
try {
ServerSocket serverSocket = new ServerSocket(port);
while (true) {
Socket clientSocket = serverSocket.accept();
// 处理连接请求
}
} catch (IOException e) {
e.printStackTrace();
}
在上述代码中,accept()
方法是阻塞的(即,它将一直等待连接请求到达),直到有连接请求到达时才会返回。当连接请求到达时,accept()
方法将返回一个新的Socket
对象,我们可以使用该对象来处理客户端请求。
一旦有客户端连接,我们就可以使用新的Socket
对象来处理客户端请求。以下是客户端请求处理的示例代码:
try {
ServerSocket serverSocket = new ServerSocket(port);
while (true) {
Socket clientSocket = serverSocket.accept();
// 处理连接请求
InputStream input = clientSocket.getInputStream();
OutputStream output = clientSocket.getOutputStream();
// 读取请求数据
byte[] buffer = new byte[1024];
int len = input.read(buffer);
String request = new String(buffer, 0, len);
// 发送响应数据
String response = "Hello, World!";
output.write(response.getBytes());
output.flush();
// 关闭连接
clientSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
在上述代码中,我们使用InputStream
和OutputStream
对象来读取客户端请求和发送响应数据。注意,必须调用flush()
方法来确保发送的数据已经被完全写入到底层网络流。
ServerSocket
一旦不再需要监听套接字,我们可以通过close()
方法关闭ServerSocket
对象。以下是关闭ServerSocket
的示例代码:
try {
ServerSocket serverSocket = new ServerSocket(port);
while (true) {
Socket clientSocket = serverSocket.accept();
// 处理连接请求
clientSocket.close();
}
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
在上述示例中,我们注意到我们关闭了每个客户端连接的Socket
对象,然后才关闭ServerSocket
对象。这是因为如果我们在关闭ServerSocket
之前未关闭所有客户端连接,客户端仍然可以向服务器发送数据,这可能导致数据包丢失,以及在不同操作系统之间提供不可预测的结果。
Java中的ServerSocket
类可以帮助我们创建TCP服务器来处理客户端连接请求。通过创建ServerSocket
对象并监听特定端口,我们可以等待客户端连接,接收客户端请求,并向客户端发送响应。最后,我们可以通过调用close()
方法关闭ServerSocket
来停止监听套接字。