java里socket通信,异常处理问题。
我有这样的设想,每隔5秒钟,客户端向服务端用socket取数据,拿到数据后显示出来。正常情况下,没有问题。但是说偶尔服务端的服务没有开,5秒没有获取到数据,我就提示用户通...
我有这样的设想,每隔5秒钟,客户端向服务端用socket取数据,拿到数据后显示出来。正常情况下,没有问题。但是说偶尔服务端的服务没有开,5秒没有获取到数据,我就提示用户通信故障。在socket = new Socket("192.168.183.1", 9002); 创建socket连接如果5秒钟没有拿到数据,就提示通信故障,然后线程继续,如果依旧没有链接到服务端,依旧显示通信故障。知道服务端打开,正常工作。
我的想法就是,不影响线程走的情况下,处理连接失败的异常。。。不知道该如何下手。 展开
我的想法就是,不影响线程走的情况下,处理连接失败的异常。。。不知道该如何下手。 展开
3个回答
展开全部
直接用这种方式处理:
while(true){
socket = new Socket(("192.168.183.1", 9002);
socket.setSoTimeout(5000);//5000ms = 5s
try{
socket.connect();
}catch(IOException e){
//这行写你提示通信失败提示
continue;
}
}
更多追问追答
追问
我已经采用了您的用法,我数了一下,直到25秒左右才爆出异常。请看下面内容,
“因为调用ServerSocket类的accept()方法和Socket输入流的read()方法时会引起线程阻塞,所以应该用 setSoTimeout()方法设置超时,缺省的设置是0,即超时永远不会发生。”
根据上述表达,这个方法应该是读取read,发送write数据时候的超时时间。而不是建立socket链接的时间
追答
这里要弄清楚,你现在是客户端,是主动连接服务器,用的是connect方法,setSoTimeOut是set socket time out的英文缩写,不明白你可以查API或者直接看源代码,这里设置的时间是socket连接超时时间,不存在你说的read、write,只有连接成功之后,得到的流才的read、write之说,而且要保持长时间连接,就要做一个心跳程序。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |