我正在开发一个使用Socket连接到服务器的软件;
connectionThread = new Thread(new Runnable( ) {
public void run() {
InetAddress serverAddress = InetAddress.getByName(ip);
serverSocket = new Socket(serverAddress, port);
//do more stuff
}
});
connectionThread.start();
当客户端未连接到服务器时,线程会一直等待新Socket的返回,直到达到超时。
我想让用户取消该操作。我尝试在用户点击后退按钮时调用connectionThread.interrupt()
。但线程一直在运行。
我可以让线程运行直到新的Socket超时,但我认为它不是很好。
答案 0 :(得分:1)
请勿使用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();