Socket中判断是否处于连接状态的方法

阅读更多
工程里遇到了需要判断Socket是否已经关闭的问题,使用
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异常,没有问题。

你可能感兴趣的:(socket)