工程里遇到了需要判断Socket是否已经关闭的问题,使用
毫无作用,随后查看了网上先关解决办法,发现Socket中有一个方法void sendUrgentData(0xFF)当对方SO_OOBINLINE属性没有打开时,就会自动舍弃这个字节,而SO_OOBINLINE属性默认情况下就是关闭的,但是只要能够发送到对方Socket,sendUrgentData(0xFF)方法就不会报错,只要catch一下IOException就OK了,当对方关掉了Socket之后就会进入catch,问题迎刃而解。
当socket断掉之后,抛出java.net.socketexception broken pipe异常,没有问题。
public boolean isAlive(){
if(mSocket.equals(null)||mSocket.isClosed()||!mSocket.isConnected()||mSocket.isInputShutdown()||mSocket.isOutputShutdown()){
MyLog.d("mSocket.isConnected()"+mSocket.isConnected());
return false;
}else{
MyLog.d("mSocket.isConnected()"+mSocket.isConnected());
return true;
}
}
毫无作用,随后查看了网上先关解决办法,发现Socket中有一个方法void sendUrgentData(0xFF)当对方SO_OOBINLINE属性没有打开时,就会自动舍弃这个字节,而SO_OOBINLINE属性默认情况下就是关闭的,但是只要能够发送到对方Socket,sendUrgentData(0xFF)方法就不会报错,只要catch一下IOException就OK了,当对方关掉了Socket之后就会进入catch,问题迎刃而解。
try{
mSocket.sendUrgentData(0xFF);
}catch(IOException e){
Log.d(e+":要关掉了阿 !");
mSocket.close();
}
当socket断掉之后,抛出java.net.socketexception broken pipe异常,没有问题。