【问题标题】:Keeping a (single threaded) server socket listening for clients on unexpected socket closure保持(单线程)服务器套接字在意外套接字关闭时监听客户端
【发布时间】:2013-03-20 16:47:11
【问题描述】:

应该如何处理客户端意外断开连接。除非客户端明确声明要关闭,否则我想保持服务器运行/侦听。

例如,我的服务器正在侦听,然后客户端关闭,这导致服务器的方法结束 - 我怎样才能让它返回到方法的开头?

    serverSocket = new ServerSocket(port);
    clientSocket = serverSocket.accept();         
    out = new PrintWriter(clientSocket.getOutputStream(), true);
    in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));                   
    BasicProtocol bp = new BasicProtocol(password);
    out.println(bp.processInput(""));
    String inputLine;
    while((inputLine = in.readLine()) != null ){
       System.out.println("Client asks: " + inputLine);
       out.println(bp.processInput(inputLine));            
    }

如上,如果出现连接重置错误,如何等待重新连接?

【问题讨论】:

  • 看这个例子:Typical Multi-threaded server
  • '导致服务器的方法结束' - 它是如何做到的?您的异常处理代码是什么样的?
  • @Eng.Fouad 所以你必须有多线程来处理这个?
  • 显然是通过将该代码放入循环中。服务器是单线程的这一事实是这里唯一的另一个问题。
  • 很明显不是吗?但这就是答案,有时您会想到简单的事情。

标签: java sockets


【解决方案1】:

例如,您可以在该方法中使用一个带有布尔变量的 while 循环,该变量在客户端想要关闭时更改。因此:

boolean isRunning = true;
while (isRunning) {
    //Your current method - when client wants to disconnect just set isRunning = false;
}

【讨论】:

    猜你喜欢
    • 2012-06-09
    • 1970-01-01
    • 2021-04-04
    • 2015-04-07
    • 2010-10-21
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多