簡體   English   中英

如何使用Java關閉服務器的TCP連接

[英]How to close TCP connection from server in Java

這是我需要用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()方法中執行此操作,並在調用方法的finally塊中使用saver server .close() 。 。

注意:您的套接字名稱實際上是錯誤的方法。 通常使用ServerSocket serverSocketSocket socket = serverSocket.accept()

我可能對此不太確定,但我相信socket.close()將發送所有命令(FIN / FIN-ACK)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM