Java Socket编程:连接断开问题实例
在Java Socket编程中,连接和断开是非常基本且常见的操作。下面我们将通过一个实例来详细探讨这些问题。
假设我们有一个服务器端程序,如下所示(使用TCP协议):
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(1234); // 设置监听的端口
System.out.println("Server is listening on port 1234...");
Socket clientSocket = serverSocket.accept(); // 等待客户端连接
System.out.println("Received connection from client: " + clientSocket.getRemoteSocketAddress());
try (OutputStream outToClient = clientSocket.getOutputStream();
InputStream inFromClient = clientSocket.getInputStream()) {
// 与客户端进行数据交互,例如发送消息
String message = "Hello, Client!"; // 构造要发送的消息
outToClient.write(message.getBytes()); // 将消息发送到客户端
} catch (IOException e) {
System.err.println("Error occurred while communicating with client: " + e.getMessage());
e.printStackTrace();
} finally {
if (clientSocket != null) { // 如果客户端连接未关闭
clientSocket.close(); // 关闭客户端连接
}
}
serverSocket.close(); // 关闭服务器端的Socket监听
}
}
这个程序中,服务器会一直在1234
端口等待客户端的连接。当一个客户端连接到服务器时,服务器将打印出相关信息,并与客户端进行数据交互。
如果在客户端关闭连接后,服务器仍然尝试去读写已关闭的流(例如clientSocket.getInputStream()
),将会抛出IOException
。这就需要我们在处理客户端断开连接的情况时,要确保相关的资源(如输入流)已经被正确关闭。
还没有评论,来说两句吧...