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

时间:2017-08-28 06:36:26

标签: java tcp server

以下是我需要在Java中实现的用例:

  1. 服务器正在侦听来自某些客户端的推送消息
  2. 如果客户端有一些数据要推送到服务器,它会打开TCP连接并发送所有消息
  3. 当客户端发送最后一条消息(特殊消息说这是最后一条消息)时,服务器应通过启动TCP关闭握手来关闭连接
  4. 我上一步有问题,因为我不知道如何关闭服务器站点的连接。我目前的代码是吼叫。如何启动连接关闭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
    }
    

    }

2 个答案:

答案 0 :(得分:1)

你已经完成了。 in.close()关闭输入流,套接字输出流和套接字。

你应该关闭的是输出流连接到套接字的任何内容,以确保它被刷新,你应该在processStream()方法中执行此操作,并在server .close()中使用finally {1}}阻止调用方法。

注意你的套接字名称确实是错误的。习惯使用ServerSocket serverSocketSocket socket = serverSocket.accept()

答案 1 :(得分:0)

我可能不完全确定这个,但我相信socket.close()会发送所有命令(FIN / FIN-ACK)