java - 如何在客户端 Socket 上等待 ServerSocket 连接

标签 java sockets serversocket

我想知道如何在 Socket 客户端等待 ServerSocket 连接。

当我首先执行服务器(发送)时,它等待使用 ServerSocket.accept 方法的客户端连接。问题是如果服务器没有先执行,客户端(接收)就无法执行。我想添加一个条件以允许客户端等待来自服务器的连接。可能吗?

发送(服务器)

ServerSocket servsock = new ServerSocket(1234);
Socket sock = servsock.accept();

接收(客户端)

Socket sock = new Socket(from, 1234);

错误(客户端)

java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:189)

谢谢。

最佳答案

没有内置的方法可以做到这一点。您必须在客户端捕获异常,并自己实现重试机制。

伪代码:

Socket sock = null;
while (retryCounter < threshold) {
  try {
   retryCounter++;
   sock = new Socket(form, 1234);
  } catch (...) {
    // handle exceptions
    // possibly add a sleep period
  }
}
if (sock == null) {
  // you failed to connect
} else {
  // you're connected
}

如果您有 GUI,请小心:您可能需要在单独的线程中实现其中的一些,或者使用计时器来避免卡住您的 UI。

关于java - 如何在客户端 Socket 上等待 ServerSocket 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8456339/

相关文章:

java - Java 中的 SSLServerSocket 和 SSLSocket 握手异常

sockets - 无限循环监听套接字

java.net.ConnectException : Connection refused: connect under load

java - 为什么Java不支持在finally抛出异常时从try/catch lost中检索异常?

javascript - 如何使用 SSL 将 haproxy 放在 socket.io 前面?获取混合内容警告

linux - 在服务器端,获取客户端连接的服务器IP

java - java中如何将字符串传递到本地服务器

java - 使用 libgdx 的输入文本字段发送特殊字符

java - 无法从 Eclipse 查看 Tomcat 启动期间抛出的异常

java - 自定义注释,如 Lombok