[英]How wait a ServerSocket connection on client Socket
我想知道如何在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。
感谢Mat,它有效。
Socket sock = null;
while (true) {
try {
sock = new Socket(from, 1234);
if (sock != null) { break; }
}
catch (IOException e) { Thread.sleep(1000); }
}
// rest of the code
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.