java里socket通信,异常处理问题。

我有这样的设想,每隔5秒钟,客户端向服务端用socket取数据,拿到数据后显示出来。正常情况下,没有问题。但是说偶尔服务端的服务没有开,5秒没有获取到数据,我就提示用户通... 我有这样的设想,每隔5秒钟,客户端向服务端用socket取数据,拿到数据后显示出来。正常情况下,没有问题。但是说偶尔服务端的服务没有开,5秒没有获取到数据,我就提示用户通信故障。在socket = new Socket("192.168.183.1", 9002); 创建socket连接如果5秒钟没有拿到数据,就提示通信故障,然后线程继续,如果依旧没有链接到服务端,依旧显示通信故障。知道服务端打开,正常工作。
我的想法就是,不影响线程走的情况下,处理连接失败的异常。。。不知道该如何下手。
展开
 我来答
admionio
2013-08-30 · 超过29用户采纳过TA的回答
知道答主
回答量:74
采纳率:0%
帮助的人:80.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之说,而且要保持长时间连接,就要做一个心跳程序。
ATM053
2013-08-30
知道答主
回答量:7
采纳率:0%
帮助的人:5.8万
展开全部
在建立socket连接时设置超时时间,连接不上的话就反馈连接失败不就可以了嘛
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-30
展开全部
try catch 处理下 连不上没有必要继续了吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式