`
lancijk
  • 浏览: 388332 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

判断Socket 服务端是否已关闭

    博客分类:
  • Java
阅读更多

最近在开发中遇到一个问题,就是如何判断远端服务器是否已经断开连接,如果断开那么需要重新连接。

首先想到socket类的方法isClosed()、isConnected()、isInputStreamShutdown()、isOutputStreamShutdown()等,但经过试验并查看相关文档,这些方法都是本地端的状态,无法判断远端是否已经断开连接。

然后想到是否可以通过OutputStream发送一段测试数据,如果发送失败就表示远端已经断开连接,类似ping,但是这样会影响到正常的输出数据,远端无法把正常数据和测试数据分开。

最后又回到socket类,发现有一个方法sendUrgentData,查看文档后得知它会往输出流发送一个字节的数据,只要对方Socket的SO_OOBINLINE属性没有打开,就会自动舍弃这个字节,而SO_OOBINLINE属性默认情况下就是关闭的,太好了,正是我需要的!

于是,下面一段代码就可以判断远端是否断开了连接:

try{
      socket.sendUrgentData(0xFF);
}catch(Exception ex){
      reconnect();
}

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xyz_lmn/archive/2011/01/17/6146749.aspx

分享到:
评论
3 楼 lancijk 2011-12-13  
vrussell 写道
谢谢你!我正遇到这个问题。



   呵呵 ..希望有帮到你..
2 楼 vrussell 2011-10-21  
谢谢你!我正遇到这个问题。
1 楼 aspnetdb 2011-03-28  
顶一个。scott

相关推荐

    如何判断SOCKET通信中,客户端在10s内未发送数据或者未收到服务器发送的数据,自动断开.doc编程资料

    如何判断SOCKET通信中,客户端在10s内未发送数据或者未收到服务器发送的数据,自动

    QT TCP服务端如何判断客户端已断开连接 - 北冥有鱼的博客 - CSDN博客1

    QT提供了丰富的网络编程接口,其中包括`QAbstractSocket`类,该类包含了判断客户端断开连接的方法。 首先,`QAbstractSocket`枚举类型中的`SocketError`定义了各种可能的套接字错误。当客户端主动断开连接时,...

    如何在C语言中判断socket是否已经断开

    在WINDOWS下比较简单,可以使用FD_CLOSE事件判断SOCKET是否已经断开 view plaincopy to clipboardprint? bool IsSocketClosed(SOCKET clientSocket) { bool ret = false; HANDLE closeEvent = WSACreateEvent();...

    C语言socket服务器端源码

    6. **关闭Socket**:完成通信后,使用`close()`函数关闭socket。 在多客户端连接的场景下,服务器需要同时处理多个连接请求。`select()`函数就是解决这个问题的关键。`select()`允许我们监控多个文件描述符(包括...

    android蓝牙通信(分为客户端,服务端)

    - 获取目标服务端设备的BluetoothDevice对象,可以是通过扫描找到的,也可以是之前已配对的设备。 - 使用BluetoothDevice的createRfcommSocketToServiceRecord()方法创建一个BluetoothSocket,该方法会创建一个...

    HP-Socket开发TCP Client

    在HP-Socket中,可以使用`GetLastError()`函数获取错误代码,然后根据错误代码判断问题原因。 最后,当我们完成TCP客户端的任务后,应关闭连接并释放资源。这可以通过调用`Close()`函数实现: ```cpp client.Close...

    Android开发,Socket Client端和Socket Server端数据发送和接收

    在Java中,Socket类和ServerSocket类提供了客户端和服务端的实现。 - **TCP/IP协议**:传输控制协议/因特网协议,确保数据可靠传输,通过三次握手建立连接,四次挥手断开连接。 2. **创建Socket Server** - **...

    andorid使用socket与服务端连接,实现登陆注册

    总结来说,Android使用Socket与服务器通信主要涉及以下几个步骤:创建Socket连接、获取输入输出流、发送和接收数据、处理结果以及关闭连接。对于初学者来说,理解这些基础概念并实际操作一次,是掌握网络通信的关键...

    Python学习笔记-基于socket基础的http服务端程序

    这通常涉及到解析请求路径,判断文件是否存在,读取文件内容以及设置合适的HTTP响应头信息,如`Content-Type`和`Content-Length`。 总的来说,通过Python的`socket`模块,我们可以学习到网络通信的基础,理解HTTP...

    利用DELPHI中SOCKET实现通讯编程

    6. **关闭连接**:完成通信后,服务端需要调用`close()`函数关闭SOCKET连接。 客户端程序的实现则相对简单: 1. **初始化SOCKET**:客户端同样使用`socket()`函数创建SOCKET句柄。 2. **解析服务器地址**:客户端...

    C实现基于Socket实现自定义协议通信

    例如,`recv()`可能因为网络问题而返回小于期望值的结果,这时需要判断是否已经接收完整个数据包,或者是否出现了错误。同样,`send()`也可能因为网络拥堵等原因不能一次性发送所有数据,需要根据返回值进行重试。 ...

    C# 基于Socket传输大文件源码.rar

    例如,可以捕获Socket异常,判断是否需要关闭连接并重新发起连接请求。客户端还可以定期发送心跳包,以检测服务器是否在线。 5. **性能优化** 为了提高大文件传输效率,可以考虑使用异步IO操作,如BeginSend和...

    socket心跳功能

    5. 处理异常:如果在规定时间内未收到心跳回应,客户端或服务端可以判断连接可能已断开,然后尝试重新连接。 6. 关闭连接:在不需要心跳连接时,确保正确关闭Socket和相关的输入/输出流,释放资源。 在压缩包文件...

    [Java]详解Socket和ServerSocket学习笔记

    在实际应用中,要判断Socket是否处于连接状态,可以使用如下语句: ```java boolean isConnection = socket.isConnected() && !socket.isClosed(); ``` 半关闭/半打开状态: 当Socket关闭时,其输入输出流也会被...

    nio socket编程java代码示例,客户端发送消息,服务端接收

    在isReadable()判断中,服务端将读取客户端发送的数据,并做出响应。 二、客户端实现 客户端主要任务是创建SocketChannel,连接到服务器,并向服务器发送数据。以下是一个基本的客户端代码框架: ```java import ...

    c# SocketAsyncEventArgs例子包含服务端和客户端

    - 关闭Socket时,确保释放SocketAsyncEventArgs资源,防止内存泄漏。可以使用Pool机制复用SocketAsyncEventArgs对象,提高性能。 6. **性能优化**: - 使用适当的缓冲区大小,过大可能导致内存浪费,过小则可能...

    Android手机之间的蓝牙通信客户端和服务端代码的代码实现

    使用`BluetoothAdapter.getDefaultAdapter()`获取默认的蓝牙适配器,并通过`BluetoothAdapter.isEnabled()`判断蓝牙是否已开启。若未开启,可调用`BluetoothAdapter.enable()`开启蓝牙。 2. **搜索蓝牙设备** 使用...

    VB NET CS客户端服务端聊天源码.rar

    通过本源码可了解下初始socket、对发送的消息数据进行编码、当发送数据完后关闭socket、禁用某 Socket 上的发送和接收、判断给定的IP地址的合法性、异常处理、判断给定的IP地址的合法性。这个程序由客户端和服务端...

    Socket连接池的简单应用

    为此,本文档介绍了一种解决这些问题的方法——Socket连接池技术,并通过具体实例来展示如何在客户端和服务端之间实现这一技术。 #### 二、Socket连接的基础概念 在深入探讨Socket连接池之前,我们需要了解两种...

    详解基于java的Socket聊天程序——服务端(附demo)

    6. **心跳机制**:心跳机制是维持长连接稳定性的关键,通过定时发送心跳包,服务端可以判断客户端是否仍然在线。在Java中,这通常通过在客户端和服务器之间交换特定的协议消息(如空消息或特定标识符)来实现。 7. ...

Global site tag (gtag.js) - Google Analytics