这是我需要用 Java 实现的用例:
- 服务器正在监听来自某些客户端的推送消息
- 如果客户端有一些数据要推送到服务器,它会打开 TCP 连接并发送所有消息
- 当客户端发送最后一条消息(表示这是最后一条消息的特殊消息)时,服务器应通过启动 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/