最近在开发中遇到一个问题,就是如何判断远端服务器是否已经断开连接,如果断开那么需要重新连接。
首先想到socket类的方法isClosed()、isConnected()、isInputStreamShutdown()、isOutputStreamShutdown()等,但经过试验并查看相关文档,这些方法都是本地端的状态,无法判断远端是否已经断开连接。
然后想到是否可以通过OutputStream发送一段测试数据,如果发送失败就表示远端已经断开连接,类似ping,但是这样会影响到正常的输出数据,远端无法把正常数据和测试数据分开。
最后又回到socket类,发现有一个方法sendUrgentData,查看文档后得知它会往输出流发送一个字节的数据,只要对方Socket的SO_OOBINLINE属性没有打开,就会自动舍弃这个字节,而SO_OOBINLINE属性默认情况下就是关闭的,太好了,正是我需要的!
于是,下面一段代码就可以判断远端是否断开了连接:
try{
socket.sendUrgentData(0xFF);
}catch(Exception ex){
reconnect();
}
分享到:
相关推荐
Socket分为客户端(Socket Client)和服务器端(Socket Server),它们共同构成了基于TCP/IP协议的通信模型。本篇文章将详细探讨Android环境下如何进行Socket Client端和Socket Server端的数据发送与接收。 1. **...
在本实例中,我们将深入探讨如何使用JavaFX结合Socket编程实现一个多线程的通信程序,包括Server端和Client端。 首先,让我们了解Socket编程的基本概念。Socket是网络通信中的一个端点,它允许两个远程系统通过网络...
在使用QT进行TCP服务器开发时,一个常见的需求是检测客户端是否已经断开了连接。这篇文章将介绍如何在QT中实现这一功能,特别是在C++环境中。QT提供了丰富的网络编程接口,其中包括`QAbstractSocket`类,该类包含了...
Socket client = server.accept(); new Thread(() -> { DataInputStream in = new DataInputStream(client.getInputStream()); DataOutputStream out = new DataOutputStream(client.getOutputStream()); ...
### Java在Client-Server网络中的应用详解 #### 一、Java网络应用模型 随着Java语言的广泛应用及其与互联网的高度融合,Java已经成为构建现代信息系统的重要工具之一。Java的特点,如跨平台性、面向对象的设计理念...
在这个项目中,"Socket文件传输"可能包含了客户端和服务器端的源代码文件,如client.c或client.py,server.c或server.py等。这些文件通常包含了上述的TCP文件传输逻辑,通过编译或运行可以实现文件的双向传输。 ...
本资源"Telnet-Server-Client.rar"包含了一个用Java实现的`Telnet`服务器和客户端,这对于理解网络编程和`Socket`通信具有很高的学习价值。 首先,我们要了解`Java`中的`Socket`编程。`Socket`是网络通信的基础,它...
本文将详细解析"client-server-socket.rar_Server"中的核心知识点,包括服务器端如何为客户端提供数学计算服务和时间查询服务,以及在实现这些服务时涉及到的Socket编程。 首先,我们来理解客户端-服务器模型。这种...
总的来说,Java的`Socket`和`ServerSocket`类为网络通信提供了便利,结合多线程和超时机制,可以构建出稳定可靠的服务器端程序。在实际项目中,根据需求可能还需要考虑异常处理、数据编码解码、安全加密等方面,以...
"Android socket上传大文件client + server"这个项目就是针对这种情况设计的,它通过自定义的TCP通信协议实现了大文件的分块传输,支持断点续传,以确保文件传输的稳定性和效率。 首先,我们来看一下Socket通信的...
Java中的Socket编程主要包括两个部分:客户端Socket和服务器端Socket。 - **客户端Socket**:通常用于发起连接请求,并与服务器建立通信。 - **服务器端Socket**:负责监听客户端的连接请求,并接收来自客户端的...
3. **TCP Server**: 在“Socket-TCP-Echo”项目中,服务器端的实现(通常名为Server.java)会创建一个ServerSocket实例,监听指定的端口号。当客户端连接时,它接受连接并创建一个新的Socket对象,通过该Socket与...
Java的Socket编程是网络编程的基础,它允许两个网络应用程序之间建立通信链接,进行数据传输。在Java中,Socket是java.net包的一部分,提供了客户端/服务器通信的基本接口。本篇文章将深入探讨Socket编程的基础知识...
Java Socket聊天室是一种基于Java网络编程技术实现的通信系统,主要使用了Socket接口来构建客户端与服务器端的连接。在这个项目中,用户通过控制台(console)进行交互,体验类似于简单的在线聊天室。以下是对这个Java...
Java网络编程是开发分布式应用程序的关键技术之一,其中Socket编程扮演着至关重要的角色。在Java面试中,对Socket编程的理解和应用能力通常是评估开发者技能的重要标准。以下是对Socket编程的详细阐述: 1. **Java ...
Socket通信通常涉及客户端(Client)和服务器端(Server)。在这个“java socket 双向通信实例demo”中,服务端不仅能够响应客户端的请求,还能主动发送指令给客户端。这种双向通信机制使得应用更灵活,可以用于实时...
在这个“server_client通信程序”中,我们很可能会看到使用Socket编程实现的实例。Socket是网络编程中的一个接口,允许应用程序通过它来发送和接收数据。 1. **Socket编程基础**: Socket是进程间通信(IPC)的一...
然而,当网络环境中出现长时间无数据交换时,一些中间设备可能会认为连接已经断开,从而关闭连接。心跳包就是为了解决这一问题而设计的,它定期发送一个简短的数据包,用来告知对端连接仍然活跃。 在Java中实现心跳...
"FTP server client"可能是指一个包含服务器端和客户端功能的综合项目,使得开发者可以在同一环境中测试和调试FTP通信。Java FTP服务器可能使用了Apache Commons Net库或其他开源库来实现,这些库提供了处理FTP命令...
在构建一个聊天应用时,我们需要区分客户端(Client)和服务器端(Server)。服务器端通常负责监听特定端口,等待客户端连接,并处理来自客户端的请求。客户端则需要连接到服务器,发送消息并接收服务器的回应。 1....