public void ConnectHNM() throws ConnectHNMException{ try{ //建立SOCKET连接 socket = new Socket(ip,HNMPort); //成功则状态为1 State = 1; socket.setReceiveBufferSize(5); socket.setSendBufferSize(1024); }catch(Exception err){ //失败抛出错误,状态为0 State = 0; socket = null;// or socker.close(); throw new ConnectHNMException(); } } 在SERVER端判断,如果连接断了,关闭连接试试看
setSoTimeout(int timeout) Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds.Throws: SocketException - if there is an error in the underlying protocol, such as a TCP error.用超时判断
try{
//建立SOCKET连接
socket = new Socket(ip,HNMPort);
//成功则状态为1
State = 1;
socket.setReceiveBufferSize(5);
socket.setSendBufferSize(1024);
}catch(Exception err){
//失败抛出错误,状态为0
State = 0;
socket = null;// or socker.close();
throw new ConnectHNMException();
}
}
在SERVER端判断,如果连接断了,关闭连接试试看
SocketException - if there is an error in the underlying protocol, such as a TCP error.用超时判断
SERVER端也存在和客户端一样的问题啊,如果是中间某个如路由断了,谁也判断不了啊。
建议读写为两个线程。
我的程序已经是多线程了。只不过不是每个连接开一个线程而已。violetrose(violetrose) :
如果你说的正确的话,能不能说下这个TIMEOUT的含义?
搞半天你就没搞懂TimeOut是干嘛的……
比如设置超时为60秒,则SOCKET每收到一次包就重新开始计时,如果过了60秒还没有新的包到达,就会抛出一个超时异常……你只要捕捉这个异常,然后把SOCKET断开就行了……
只不过不是每个连接开一个线程而已。应该是一个读一个写,至少两个线程。至于你说你情况,我大概了解了。实际不是超时的问题。这种问题需要每隔一段时间发一些数据来监测连接是否已经断掉。这是没有办法的。