簡體   English   中英

客戶端突然斷開連接后如何使服務器套接字保持活動狀態?

[英]How to keep the server socket alive after client abruptly disconnects?

一旦客戶端斷開連接並且我重新啟動客戶端,服務器就會給出讀取線路超時。 當我再次運行服務器時,它工作正常。 因此,在斷開連接一次后,我收到讀取線路超時異常,下次它可以工作。

import java.io.*;

public class TcpServer {

    ServerSocket welcomeSocket;

    public TcpServer() throws IOException{

        createSocket(port);
    }

    public TcpServer(int port) throws IOException{

        createSocket(port);
    }

    private void createSocket(int port) throws IOException{

        welcomeSocket = new ServerSocket(port);

    }

    @Override
    public void listen() throws IOException{

        boolean exitServer = false;
        Socket connectionSocket = null;

        try {
            while (!exitServer ) {
                    if(...){
                    exitServer = true;
                }
                }
            }
        } catch (IOException e) {

           try {
               welcomeSocket.accept();
               listen();
           } catch (IOException e1) {
               System.out.println("Cannot open connection!!!");
           }

        } 
    }
}

當有人嘗試連接時,ServerSocket.accept() 方法會阻止並返回一個新的客戶端套接字連接。 將其放入 while 循環中,然后為這個新的套接字工作線程生成一個線程。 類似的東西:

 ServerSocket welcomeSocket = new ServerSocket(port);
 while (true) {
     Socket socket = welcomeSocket.accept();
     new Thread(new RunnableSocketWorker(socket));
 }

如果您的客戶確實決定斷開連接,那沒關系,讓他們來吧。 希望正在處理它的套接字工作程序退出。 如果新客戶端嘗試連接,他們將在上面使用您的 ServerSocket 對象和這個無限循環進行連接。

套接字在 Java 中相對容易的一個重要原因是這個 ServerSocket 類處理所有傳入的新客戶端。 你為什么要自己編碼那部分?

只需取出它返回的套接字並玩得開心!

暫無
暫無

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

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