Java socket中isClose()和isConnected() .
来源:互联网 发布:淘宝退货入库 编辑:程序博客网 时间:2024/05/16 18:37
可以引起网络连接关闭的情况有以下4种:
1. 直接调用Socket类的close方法。
2. 只要Socket类的InputStream和OutputStream有一个关闭,网络连接自动关闭(必须通过调用InputStream和OutputStream的 close方法关闭流,才能使网络自动关闭)。
3. 在程序退出时网络连接自动关闭。
4. 将Socket对象设为null或未关闭最使用new Socket(…)建立新对象后,由JVM的垃圾回收器回收为Socket对象分配的内存空间后自动关闭网络连接。
虽然这4种方法都可以达到同样的目的,但一个健壮的网络程序最好使用第1种或第2种方法关闭网络连接。这是因为第3种和第4种方法一般并不会马上关闭网络连接,如果是这样的话,对于某些应用程序,将会遗留大量无用的网络连接,这些网络连接会占用大量的系统资源。
在Socket对象被关闭后,我们可以通过isClosed方法来判断某个Socket对象是否处于关闭状态。然而使用isClosed方法所返回的只是Socket对象的当前状态,也就是说,不管Socket对象是否曾经连接成功过,只要处于关闭状态,isClosde就返回true。如果只是建立一个未连接的Socket对象,isClose也同样返回true。如下面的代码将输出false。
Socket socket = new Socket();System.out.println(socket.isClosed());
除了isClose方法,Socket类还有一个isConnected方法来判断Socket对象是否连接成功。看到这个名字,也许读者会产生误解。其实isConnected方法所判断的并不是Socket对象的当前连接状态,而是Socket对象是否曾经连接成功过,如果成功连接过,即使现在isClose返回true,isConnected仍然返回true。因此,要判断当前的Socket对象是否处于连接状态,必须同时使用isClose和isConnected方法,即只有当isClose返回false,isConnected返回true的时候Socket对象才处于连接状态。下面的代码演示了上述Socket对象的各种状态的产生过程。
package mysocket;import java.net.*;public class MyCloseConnection{ public static void printState(Socket socket, String name) { System.out.println(name + ".isClosed():" + socket.isClosed()); System.out.println(name + ".isConnected():" + socket.isConnected()); if (socket.isClosed() == false && socket.isConnected() == true) System.out.println(name + "处于连接状态!"); else System.out.println(name + "处于非连接状态!"); System.out.println(); } public static void main(String[] args) throws Exception { Socket socket1 = null, socket2 = null; socket1 = new Socket("www.ptpress.com.cn", 80); printState(socket1, "socket1"); socket1.getOutputStream().close(); printState(socket1, "socket1"); socket2 = new Socket(); printState(socket2, "socket2"); socket2.close(); printState(socket2, "socket2"); }}
运行上面的代码后,将有如下的输出结果:
socket1.isClosed():false
socket1.isConnected():true
socket1处于连接状态!
socket1.isClosed():true
socket1.isConnected():true
socket1处于非连接状态!
socket2.isClosed():false
socket2.isConnected():false
socket2处于非连接状态!
socket2.isClosed():true
socket2.isConnected():false
socket2处于非连接状态!
从输出结果可以看出,在socket1的OutputStream关闭后,socket1也自动关闭了。而在上面的代码我们可以看出,对于一个并未连接到服务端的Socket对象socket2,它的isClosed方法为false,而要想让socket2的isClosed方法返回true,必须使用socket2.close显示地调用close方法。
- Java socket中isClose()和isConnected()
- Java socket中isClose()和isConnected()
- Java socket中isClose()和isConnected() .
- Java socket中isClose()和isConnected()
- Java socket中isClose()和isConnected()
- java socket isclose()和isconnected()
- 比isConnected()更靠谱的的获取socket实时连接状态!
- java中运用socket通信,http和socket的区别
- 必须手动的close,否则Socket.isClosed && Socket.isConnected()不准确
- java中Socket应用
- java中Socket应用
- java中Socket应用
- java中Socket应用
- Java 中 Socket 通信
- java中socket编程
- java中Socket编程
- Java中理解socket
- java中Socket编程
- 图论 A 帮美女省钱
- 类的成员的类的初始化
- linux 安装google拼音输入法
- 使用Linux 和Hadoop 进行分布式计算
- 学习MongoDB--(5-1):索引(简介、使用)
- Java socket中isClose()和isConnected() .
- Apache Shiro 1.2.1版本发布
- Open-Drain与Push-Pull
- javax.inject中@Inject、@Named、@Qualifier和@Provider用法
- 理解redo(2)redo内容:change vector和redo entries
- 数据库备份之_如何将备份的数据包下载到本地
- 关于标题字体
- Linux下学习ln命令笔记
- Linux创建/删除文件命令的方法