Java 如何在客户端套接字上等待服务器套接字连接
我想知道,如何在套接字客户端等待服务器套接字连接 当我首先执行服务器(send)时,它使用ServerSocket.accept方法等待客户端连接。问题在于,如果没有先执行服务器,则无法执行客户机(接收)。我想添加一个条件,允许客户端等待来自服务器的连接。可能吗 发送(服务器) 接收(客户) 错误(客户端)Java 如何在客户端套接字上等待服务器套接字连接,java,sockets,serversocket,Java,Sockets,Serversocket,我想知道,如何在套接字客户端等待服务器套接字连接 当我首先执行服务器(send)时,它使用ServerSocket.accept方法等待客户端连接。问题在于,如果没有先执行服务器,则无法执行客户机(接收)。我想添加一个条件,允许客户端等待来自服务器的连接。可能吗 发送(服务器) 接收(客户) 错误(客户端) java.net.ConnectException:连接被拒绝 位于java.net.PlainSocketImpl.socketConnect(本机方法) 位于java.net.Plain
java.net.ConnectException:连接被拒绝
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
位于java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
在java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
位于java.net.socksocketimpl.connect(socksocketimpl.java:432)
位于java.net.Socket.connect(Socket.java:529)
位于java.net.Socket.connect(Socket.java:478)
位于java.net.Socket(Socket.java:375)
位于java.net.Socket(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
}
socketsock=null;
while(retryCounter<阈值){
试一试{
retryCounter++;
sock=新插座(表1234);
}捕获(…){
//处理异常
//可能再加上一段睡眠时间
}
}
if(sock==null){
//你无法连接
}否则{
//你接通了
}
如果您有GUI,请小心:您可能需要在单独的线程中实现其中的一些功能,或者使用计时器来避免冻结您的UI。没有内置的方法可以做到这一点。您必须在客户端捕获异常,并自己实现重试机制 伪代码:
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
}
socketsock=null;
while(retryCounter<阈值){
试一试{
retryCounter++;
sock=新插座(表1234);
}捕获(…){
//处理异常
//可能再加上一段睡眠时间
}
}
if(sock==null){
//你无法连接
}否则{
//你接通了
}
如果您有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
感谢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
我应该在catch(…)中添加什么?您应该处理希望重试的异常。当发生这种情况时,在某个地方记录一些东西,如果出现“致命”异常(即重试无法解决的异常),则退出。这是非常通用的,这完全取决于您的应用程序需要什么。对不起,我不明白。有没有一种简单的方法,比如发送ping或连接测试?这是一种连接测试。平一点帮助都没有。这并不复杂,只是一个循环中的尝试/捕捉。如果您觉得奇怪,请将try/catch移到单独的函数中。我应该在catch(…)中添加什么?您应该处理要重试的异常。当发生这种情况时,在某个地方记录一些东西,如果出现“致命”异常(即重试无法解决的异常),则退出。这是非常通用的,这完全取决于您的应用程序需要什么。对不起,我不明白。有没有一种简单的方法,比如发送ping或连接测试?这是一种连接测试。平一点帮助都没有。这并不复杂,只是一个循环中的尝试/捕捉。如果您觉得奇怪,请将try/catch移动到一个单独的函数。
sock
在您测试它的地方不可能为空。Justbreak
sock
在您测试它的地方不可能为空。只需中断
。
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