![](/img/trans.png)
[英]gRPC Java: How to know if a client disconnects abruptly (server side)?
[英]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.