public class MyTask extends TimerTask{
public MyTask() { }
@Override
public void run() {
Socket s = null;
int flag=0;
try {
s=new Socket("192.168.0.150", 3456);
s.setSoTimeout(1000);
flag=1;
} catch (UnknownHostException e) {
flag=0;
System.out.println("找不到目标主机......");
} catch (IOException e) {
System.out.println("找不到目标主机......");
}finally
{
try {
if(s!=null)
{
s.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
if(flag==1)
{
System.out.println("Socket连接已建立......");
}else if(flag==0)
{
System.out.println("找不到目标主机......");
}else
{
System.out.println("未知错误......");
}
}
}上面是我在定时器任务里面写的一个socket连接的client端,我想处理它找不到server端目标主机的异常,由于我的定时器是每2秒执行一次,所以我希望socket如果连接超过1秒就直接报出异常,但s.setSoTimeout(1000);好象并没有达到我想要的效果,哪位给指点下,谢谢!
s=new Socket("192.168.0.150", 3456);
s.setSoTimeout(1000);
flag=1;
}在过了1秒钟以后,程序就会继续向下执行了。如果连接不上就会报错,程序也会终止的所以,不可能实现的。
s=new Socket("192.168.0.150", 3456);
s.setSoTimeout(1000);
//在这里要发一个消息到服务器端,如果1秒钟没返回结果,就会timeout
flag=1;
}
现在的情况是如果我不设置那个s.setSoTimeout(1000);他要5秒后才抛出异常,5秒时间超过了定时器,导致定时器异常,设置了重新编译之后现在重新部署了下,貌似效果达到了,不过楼上有什么好的意见或说法,欢迎指点,谢谢!
s.setSoTimeout(1000);用于设置Socket.read()方法允许的阻塞时间,超过这一时间read函数会抛java.net.SocketTimeoutException。
Socket s = new Socket("192.168.0.150", 3456);
System.out.println("!!");
InputStream inputStream = s.getInputStream();
System.out.println("??");
s.setSoTimeout(1);
System.out.println("> <");
inputStream.read();
s.setSoTimeout(1);
跟建立连接的时间没啥关系
SocketAddress socketaddress = new InetSocketAddress(address,port);
try{
socket = new Socket();
socket.connect(socketaddress,connectTimeOut);
}catch(Exception e){
...
}