如何在客户端 Socket 上等待 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)
谢谢。
I am wondering about, how I can wait a ServerSocket connection on Socket client side.
When I execute the server (send) first, it waits the client connection with the method ServerSocket.accept. The problem is that the client (receive) cannot be executed without the server has been executed first. I would like add a condition to allow the client to wait the connection from the server. Is it possible?
SEND (server)
ServerSocket servsock = new ServerSocket(1234);
Socket sock = servsock.accept();
RECEIVE (client)
Socket sock = new Socket(from, 1234);
ERROR (client)
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)
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
没有内置的方法可以做到这一点。您必须在客户端捕获异常,并自己实现重试机制。
伪代码:
如果您有 GUI,请小心:您可能需要在单独的线程中实现其中一些内容或使用计时器来避免冻结您的 UI。
There is no built-in way to do that. You'll have to catch the exception on the client side, and implement a retry mechanism yourself.
Pseudo-code:
Be careful if you have a GUI: you might need to implement some of that in a separate thread or use timers to avoid freezing your UI.
感谢马特,它起作用了。
Thank to Mat, it works.