我正在开发一个使用 Socket 连接到服务器的软件;
connectionThread = new Thread(new Runnable( ) {
public void run() {
InetAddress serverAddress = InetAddress.getByName(ip);
serverSocket = new Socket(serverAddress, port);
//do more stuff
}
});
connectionThread.start();
当客户端没有连接到服务器时,线程将继续等待新套接字的返回,直到达到超时。
我想让用户取消该操作。然后我试着打电话connectionThread.interrupt()
当用户单击后退按钮时。但线程仍在运行。
我可以让线程运行直到新的 Socket 超时,但我认为这不是很好。
不要使用new Socket(serverAddress, port);
。相反,首先使用创建一个新套接字new Socket()
,然后使用连接套接字Socket.connect()
。这样,您就可以
1)指定连接超时(SocketTimeoutException
将被提高),并且
2)使用以下命令从不同线程取消进程Socket.close()
(SocketException
将会提高)。
这是使用此方法的代码片段:
connectionThread = new Thread(new Runnable( ) {
public void run() {
try {
InetAddress serverAddress = InetAddress.getByName(ip);
serverSocket = new Socket();
serverSocket.connect(new InetSocketAddress(serverAddress,port),TIMEOUTMS);
//do more stuff
} catch (SocketTimeoutException ste)
{
// connect() timeout occurred
} catch (SocketException se)
{
// socket exception during connect (e.g. socket.close() called)
}
}});
connectionThread.start();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)