Reputation: 43311
I have the following code running in AsyncTask:
socket = new Socket(host, Integer.parseInt(port));
In the case when host name is correct, but there is no socket server listening on the port, this line may work several minutes before throwing exception. Can I set communication timeout? Also, is it possible to stop this process - currently it doesn't react to AsyncTask.cancel call.
Upvotes: 4
Views: 1389
Reputation: 323
You can do this:
Socket soc = null;
while(soc == null){
try{
soc = new Socket("x.x.x.x", portNumber);
}
catch(Exception ex){
}
}
Since:
socket.connect(remoteAddress, timeout)
Is notoriously unreliable, you could code your own version of timeout. The code I wrote, waits for a connection infinitely, but you can very easily introduce a timer.
Upvotes: 0
Reputation: 9284
Create the socket with the no parameters contructor like this:
socket = new Socket();
Then use
socket.connect(remoteAddress, timeout);
See http://developer.android.com/reference/java/net/Socket.html for more information.
-- Update --
I didn't notice originally that you asked about how to cancel the socket connection. While I'm not real familiar with socket programming it looks like you would do this:
Upvotes: 5
Reputation: 1571
You have to create a socket first and then use below method in it.
Socket client=new Socket();
client.connect(new InetSocketAddress(hostip,port_num),connection_time_out);
Upvotes: 1