工程里遇到了需要判断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异常,没有问题。
分享到:
相关推荐
- 利用`ClientSocket.Connected`属性判断当前Socket是否仍处于连接状态。 - 使用`ClientSocket.Poll`方法检测Socket是否可读,进而判断连接是否正常。 2. **Socket数据接收**: - 创建适当大小的缓冲区来存储...
本文将深入探讨如何使用Socket来判断1433端口的状态,以此来确认SQL Server服务是否正在运行。1433端口是SQL Server默认使用的TCP端口,用于监听客户端的连接请求。 首先,我们需要理解Socket的基本概念。Socket,...
长链接是指当数据发送完成后,Socket连接并不会立即断开,而是保持连接状态直到发生异常或程序退出。这种方式的好处在于避免了每次发送数据前都需要重新建立连接的过程,从而提高了传输效率。但是,长期维持连接会对...
本文实例为大家分享了C++判断主机是否处于联网状态的具体代码,供大家参考,具体内容如下 直接让本机访问一个网站,如果成功的话,就说明成功联网,没有访问成功,则说明没有联网!!! #include #include #...
在描述中提到,服务端采用监听方式,这意味着它处于被动状态,等待客户端发起连接请求。而客户端则是主动的,它会寻找并连接到服务端。服务端在接收到客户端的报文请求后,会进行授权判断,只有通过验证的客户端才能...
3. 带长度报文头循环读写:这种情况一般在长连接中,由于在长连接中没有条件能够判断循环读写什么时候结束。必须要加长度报文头。读函数先是读取报文头的长度,再根据这个长度去读报文。 六、TCP/IP TCP/IP 是个...
本资源“计算机软件-商业源码-282 判断计算机的联网状态.zip”提供了一种方法来检测系统是否连接到互联网。源码软件通常包含可复用的代码片段或完整的程序,用于解决特定问题或实现特定功能。在这个案例中,我们关注...
在“易语言源码易语言判断是否在局域网源码.rar”这个压缩包中,包含的源代码是用于检测当前计算机是否连接到局域网的实现。下面将详细解释易语言的相关知识以及如何判断是否在局域网中的核心要点。 首先,我们需要...
当有客户端连接到服务器时,服务器会调用`runIt(Socket cs)`方法来处理该连接。该方法的主要逻辑如下: 1. 首先检查传入的Socket对象是否为空,如果为空则抛出异常。 2. 检查当前是否有可用线程来处理请求,如果...
`Active`属性控制服务器是否处于监听状态,设置为`true`时,服务器将开始监听指定端口的连接请求。`Accept`方法用于接受来自客户端的连接,返回一个新的Socket对象,通过这个Socket对象可以进行实际的数据传输。 在...
使 Socket 处于监听状态,等待客户端连接。 #### 主循环部分 ```c while (1) { printf("\n----等待客户端连接开始一轮处理----\n"); len = sizeof(struct sockaddr); if ((new_fd = accept(sockfd, (struct ...
在实际应用中,要判断Socket是否处于连接状态,可以使用如下语句: ```java boolean isConnection = socket.isConnected() && !socket.isClosed(); ``` 半关闭/半打开状态: 当Socket关闭时,其输入输出流也会被...
1. **先调用`sci_sock_select`**:用于监听读写事件,确保Socket处于可读或可写状态。 2. **再调用`sci_sock_send`和`sci_sock_recv`**:进行数据的实际发送和接收。 **注意**:`sci_sock_select`支持对多个Socket...
因此,我们的任务是检测哪个接口处于活动状态并据此判断网络类型。 在Android平台上,我们可以使用`ConnectivityManager`类来获取网络状态信息。首先,我们需要请求访问网络状态的权限,在`AndroidManifest.xml`中...
- **概念**: 预先派生子进程是指在服务器启动时预先创建一定数量的子进程,这些子进程处于等待状态,一旦有新的客户端连接请求到来,就可以立即处理,无需再创建新进程。 - **优势**: 减少进程创建的开销,提高...
当`select`返回后,通过遍历`fd_set`来检查哪些socket处于就绪状态,然后执行相应的读写操作。 需要注意的是,`select`模型在处理大量并发连接时效率并不高,因为它需要不断轮询所有的socket,随着监控socket数量的...
处于`TIME_WAIT`状态的连接将保留一段时间,直到确认所有数据包都已丢失或被正确处理。 #### 2.8 为什么检测对端死亡需要这么长时间? 检测远程主机的连接中断可能需要一段时间,这是因为TCP协议需要一定的时间来...
二:ITxServer.sendMessage 发送前先判断此IPEndPoint客户端是否在线;因为如果不在线等情况发生;此方法没有任何消息产生;如 果发送成功并且对方已经收到;会触发发送成功的事件; 三:用户可以通过ITxServer....