停止java中的阻塞套接字
我有一个调用服务器的java套接字。但是,我不知道在哪个地址可以到达服务器,所以我在几个线程中放置了几个套接字,它们试图通过一个地址到达服务器。我的问题是我不想等待超时,但不知道如何正确地停止套接字及其线程 代码: 我怎样才能中断手术?我考虑<代码>线程.Stutter()/Case>一个坏的样式,它也不能正常工作。NET Tcp端点有一个非阻塞的停止java中的阻塞套接字,java,multithreading,sockets,network-programming,timeout,Java,Multithreading,Sockets,Network Programming,Timeout,我有一个调用服务器的java套接字。但是,我不知道在哪个地址可以到达服务器,所以我在几个线程中放置了几个套接字,它们试图通过一个地址到达服务器。我的问题是我不想等待超时,但不知道如何正确地停止套接字及其线程 代码: 我怎样才能中断手术?我考虑线程.Stutter()/Case>一个坏的样式,它也不能正常工作。NET Tcp端点有一个非阻塞的pending方法,允许使用uinsg布尔标志,但我找不到类似的方法 我不知道在哪个地址可以到达服务器,所以我把 几个线程中有几个套接字,它们试图到达服务器
pending
方法,允许使用uinsg布尔标志,但我找不到类似的方法
我不知道在哪个地址可以到达服务器,所以我把
几个线程中有几个套接字,它们试图到达服务器
每个人都有一个地址
糟糕。糟糕的决定。执行一些逻辑步骤来确定服务器的地址。或者,执行一些有助于了解服务器IP地址的操作
这样做,除非这是最后的希望
我的问题是,我不想等待
超时,但不知道如何停止套接字及其线程
对
您没有任何其他选项可以超时。Socket.connect()正在阻塞。除了等待,你什么都做不了
您必须等待超时,因为这是关闭创建的套接字对象的逻辑方式。在超时之前,不能直接关闭。将超时时间减少到应该得到结果的极限(应该接受连接)
我怎样才能中断手术?我认为线程。
而且它也不能正常工作
是的,您不应该执行Thread.stop()或Thread.interrupt()。这些都是糟糕的编程风格
如果超时过期,请对套接字执行close()操作
您应该为客户端套接字设置套接字超时。为套接字设置超时是最佳做法。根据需要,超时时间应在10秒左右或更长
您可以通过调用
java.net.SocketTimeoutException
,尽管套接字仍然有效。超时必须大于0。零超时被解释为无限超时
您可能没有在代码中使用try-catch-finally。这是一个更好的设计
在执行连接超时时,可以修改代码以退出阻塞方法,如下所示:
try{
socket = new Socket();
socket.connect(endpoint,timeout); // **Blocking method**
OutputStream out = socket.getOutputStream();
//Write Data here
}
catch(Exception e){
e.printStackTrace();
}
finally{
socket.close();
}
尝试使用
thread.interrupt()
中断线程或关闭套接字。两者都会引发异常。能否向套接字添加超时?超时后,让线程停止。不建议调用Thread.interrupt
。我不希望超时太长,因为应用程序不应该在@prasanthSocket上运行太长时间。setSoTimeout()
设置读取超时<代码>连接(端点,超时)导致连接超时。它们不是同一件事,也不是等价物。情况是,只有一组地址,没有这样的逻辑步骤可以找到them@chr-如果是这种情况,则可以。那就意味着你只能连接有限的服务器。然后你可以采用这种方法。@chr-如果我的答案有帮助,你可能会喜欢投票给他们。还有,如果有,请接受!谢谢
try{
socket = new Socket();
socket.connect(endpoint,timeout); // **Blocking method**
OutputStream out = socket.getOutputStream();
//Write Data here
}
catch(Exception e){
e.printStackTrace();
}
finally{
socket.close();
}