日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java socket中isClose()和isConnected() .

發布時間:2024/1/23 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java socket中isClose()和isConnected() . 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

可以引起網絡連接關閉的情況有以下4種:

1.? 直接調用Socket類的close方法。

2.? 只要Socket類的InputStreamOutputStream有一個關閉,網絡連接自動關閉(必須通過調用InputStreamOutputStream 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返回trueisConnected仍然返回true。因此,要判斷當前的Socket對象是否處于連接狀態,必須同時使用isCloseisConnected方法,即只有當isClose返回falseisConnected返回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 + "處于連接狀態!");elseSystem.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處于非連接狀態!

從輸出結果可以看出,在socket1OutputStream關閉后,socket1也自動關閉了。而在上面的代碼我們可以看出,對于一個并未連接到服務端的Socket對象socket2,它的isClosed方法為false,而要想讓socket2isClosed方法返回true,必須使用socket2.close顯示地調用close方法。


?

總結

以上是生活随笔為你收集整理的Java socket中isClose()和isConnected() .的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。