Не используйте 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();