<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
    數據加載中……

    Java網絡編程從入門到精通(27):關閉服務端連接

    本文為原創,如需轉載,請注明作者和出處,謝謝!

    上一篇:Java網絡編程從入門到精通(26):在服務端接收和發送數據

        在客戶端和服務端的數據交互完成后,一般需要關閉網絡連接。對于服務端來說,需要關閉SocketServerSocket

    在關閉Socket后,客戶端并不會馬上感知自已的Socket已經關閉,也就是說,在服務端的Socket關閉后,客戶端的SocketisClosedisConnected方法仍然會分別得到falsetrue。但對已關閉的Socket的輸入輸出流進行操作會拋出一個SocketException異常。

    在關閉服務端的ServerSocket后,ServerSocket對象所綁定的端口被釋放。這時客戶端將無法連接服務端程序。下面的代碼演示了在服務端關閉Socket后,客戶端是所何反應的。

    package server;

    import java.net.*;

    class Client
    {
        
    public static void main(String[] args) throws Exception
        {
            Socket socket 
    = new Socket("127.0.0.1"1234);
            Thread.sleep(
    1000);
            
    // socket.getOutputStream().write(1);
            System.out.println("read() = " + socket.getInputStream().read());
            System.out.println(
    "isConnected() = " + socket.isConnected());
            System.out.println(
    "isClosed() = " + socket.isClosed());
        }
    }
    public class CloseSocket
    {
        
    public static void main(String[] args) throws Exception
        {
            ServerSocket serverSocket 
    = new ServerSocket(1234);
            
    while (true)
            {
                Socket socket 
    = serverSocket.accept();
                socket.close();
               
            }
        }
    }

      測試
    執行下面的命令

    java server.CloseSocket
    java server.Client

    運行結果

    read() = -1
    isConnected() 
    = true
    isClosed() 
    = false

    從上面的運行結果可以看出例程Client并未拋出SocketException異常。而在012行的read方法返回了-1。如果將socket.close去掉,客戶端的read方法將處于阻塞狀態。這是因為Java在發現無法從服務端的Socket得到數據后,就通過read方法返回了-1。如果將011行的注釋去掉,Client就會拋出一個SocketException異常。大家可以試試,并socket.close行改成serverSocket.close后,客戶端就會拋出連接異常:

    Exception in thread "main" java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:
    168)
        at java.net.SocketInputStream.read(SocketInputStream.java:
    182)
        at chapter5.Client.main(CloseSocket.java:
    12)

    顯式地調用close方法關閉ServerSocket并不是必須的,在程序退出時將自動關閉ServerSocket。但通過close方法關閉ServerSocket,可以使其他的ServerSocket對象綁定該端口。可以使用ServerSocket類的isClosedisBound方法判斷ServerSocket是否處于活動狀態,如下面的代碼所示:

     

    ServerSocket serverSocket = new ServerSocket(1234);
    if (serverSocket.isBound() == true && serverSocket.isClosed() == false)
        System.out.println(
    "serverSocket處于活動狀態!");
    else
        System.out.println(
    "serverSocket處于非活動狀態!");

    上面代碼所示的“非活動狀態”可能是serverSocket對象已經關閉,也可能是serverSocket對象是使用ServerSocket類的默認構造方法創建的,而且未調用bind方法綁定端口。在這里要注意的是isBound方法返回true并不意味著serverSocket對象處于活動狀態,調用close方法并不會將綁定狀態置為false。這一點和Socket類的isConnected方法類似。

     下一篇:Java網絡編程從入門到精通(28):獲取ServerSocket信息的方法及FTP原理






    Android開發完全講義(第2版)(本書版權已輸出到臺灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

    posted on 2009-08-04 09:26 銀河使者 閱讀(3707) 評論(3)  編輯  收藏 所屬分類: java 原創網絡編程

    評論

    # re: Java網絡編程從入門到精通(27):關閉服務端連接  回復  更多評論   

    不錯啊
    2009-08-04 11:39 | 凡客誠品

    # re: Java網絡編程從入門到精通(27):關閉服務端連接  回復  更多評論   

    好東西啊!
    2009-08-04 12:10 | 99讀書人

    # re: Java網絡編程從入門到精通(27):關閉服務端連接  回復  更多評論   

    非常不錯..

    http://www.qixian.net
    http://www.nod32id.com
    http://www.fanke1.com
    http://www.du84.com
    2009-08-04 17:20 | 不錯
    主站蜘蛛池模板: 久久久www成人免费毛片| 久久久高清日本道免费观看| 野花高清在线观看免费3中文 | 亚洲色精品aⅴ一区区三区| 美女无遮挡免费视频网站| 国产在线98福利播放视频免费| 亚洲精品无码aⅴ中文字幕蜜桃| 成人人免费夜夜视频观看| 亚洲中文无码永久免| 在线永久免费观看黄网站| 国产成人综合久久精品亚洲| 亚洲A丁香五香天堂网| 国产精品免费久久久久电影网| 亚洲中文久久精品无码ww16| AAA日本高清在线播放免费观看| 亚洲精品免费在线观看| 91短视频免费在线观看| 亚洲精品无播放器在线播放 | 亚洲综合伊人久久大杳蕉| 99久久免费国产精精品| 自怕偷自怕亚洲精品| 999久久久免费精品国产| 亚洲国产成人久久一区二区三区| 免费jjzz在线播放国产| 成人性生交大片免费看好| 亚洲欧洲精品久久| 午夜免费福利在线| a高清免费毛片久久| 亚洲韩国—中文字幕| 性做久久久久久免费观看| 18禁亚洲深夜福利人口| 亚洲人成综合网站7777香蕉| 最近免费字幕中文大全| 亚洲成aⅴ人在线观看| 日韩一级在线播放免费观看| 国产亚洲精品免费视频播放| 亚洲日本视频在线观看| 亚洲国产成人精品久久久国产成人一区二区三区综 | 一区二区免费在线观看| 亚洲第一页在线观看| 免费观看四虎精品国产永久|