gpt4 book ai didi

java - 如何在Java中关闭来自服务器的TCP连接

转载 作者:行者123 更新时间:2023-11-30 06:32:04 24 4
gpt4 key购买 nike

这是我需要用 Java 实现的用例:

  1. 服务器正在监听来自某些客户端的推送消息
  2. 如果客户端有一些数据要推送到服务器,它会打开 TCP 连接并发送所有消息
  3. 当客户端发送最后一条消息(表示这是最后一条消息的特殊消息)时,服务器应通过启动 TCP 关闭握手来关闭连接

我在最后一步中遇到问题,因为我不知道如何关闭来自服务器站点的连接。我当前的代码如下。如何从服务器站点发起连接关闭 TCP 握手?感谢您的帮助。

public class Server{

public static void main(String[] args) throws Exception {

while (true) {
int port = AppConfig.getInstance().getPort();

try (ServerSocket socket = new ServerSocket(port)) {
Socket server = socket.accept();

InetAddress ipAddress = server.getInetAddress();

MessageHandler handler = new MessageHandler(ipAddress);

InputStream in = server.getInputStream();

// reads all bytes from input stream and process them by given handler
processStream(in, handler);
in.close();

server.close();
} catch (Exception e) {
LoggingUtils.logException(e);
}
}
}

private static void processStream(InputStream in, MessageHandler handler) throws Exception {
// implementation is omitted
}

}

最佳答案

你已经做到了。 in.close() 关闭输入流、套接字输出流和套接字。

您真正应该关闭的是连接到套接字的任何输出流,以确保它被刷新,并且您应该在 processStream() 方法中使用保护程序来执行此操作 server .close() 在调用方法的 finally block 中。

NB 你的套接字名称确实是错误的。习惯上使用ServerSocket serverSocket,以及Socket socket = serverSocket.accept()

关于java - 如何在Java中关闭来自服务器的TCP连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45912993/

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