我有一个程序通过 xot(x25 over tcp / ip)协议连接到服务器。
我有一个连接的线程,使用xot库向服务器发送recv数据。
public class MyThread extends Thread{
public MyThread() {
}
@Override
public void run(){
// init sock
...
// connect to server
sock.connect("server_address", timeout);
System.out.println("send data ..");
sock.send(data);
System.out.println("send data ok, recv data ..");
Data data = sock.recv();
System.out.println("recv data ok");
}
}
我使用的lib可以处理连接超时,但是没有像setSoTimeout()这样的方法来处理发送时的超时。 recv数据。
所以,我不知道如何在发送和放弃时正确地停止mythread。 recv方法运行了很长时间。
任何人都可以建议我一些解决方案。
感谢
权
答案 0 :(得分:1)
MyThread myt = new MyThread();
myt.start();
... later on ...
myt.interrupt();
请注意,interrupt()
并非完全万无一失(阅读文档),但在您的情况下它将有所帮助。您可能还需要修改自己的代码(在MyThread
内)以使用interrupted
或isInterrupted
答案 1 :(得分:1)
我没有发现你阻止/等待的发送/接收是否是一个“正常”的TCP / IP套接字;但如果是这样,只需关闭套接字就可以很容易地从外部中止I / O操作。这并不广为人知,但AFAIK完全合法,它就像一个魅力。
当然,I / O操作产生IOException
,但这很容易捕获,然后您可以退出Thread的run()
方法。
答案 2 :(得分:0)
您将需要使用易失性标志和一个倒计时循环,直到超时耗尽或连接发生为止。