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

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

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

    隨筆 - 312, 文章 - 14, 評(píng)論 - 1393, 引用 - 0
    數(shù)據(jù)加載中……

    Java網(wǎng)絡(luò)編程從入門到精通(27):關(guān)閉服務(wù)端連接

    本文為原創(chuàng),如需轉(zhuǎn)載,請(qǐng)注明作者和出處,謝謝!

    上一篇:Java網(wǎng)絡(luò)編程從入門到精通(26):在服務(wù)端接收和發(fā)送數(shù)據(jù)

        在客戶端和服務(wù)端的數(shù)據(jù)交互完成后,一般需要關(guān)閉網(wǎng)絡(luò)連接。對(duì)于服務(wù)端來說,需要關(guān)閉SocketServerSocket

    在關(guān)閉Socket后,客戶端并不會(huì)馬上感知自已的Socket已經(jīng)關(guān)閉,也就是說,在服務(wù)端的Socket關(guān)閉后,客戶端的SocketisClosedisConnected方法仍然會(huì)分別得到falsetrue。但對(duì)已關(guān)閉的Socket的輸入輸出流進(jìn)行操作會(huì)拋出一個(gè)SocketException異常。

    在關(guān)閉服務(wù)端的ServerSocket后,ServerSocket對(duì)象所綁定的端口被釋放。這時(shí)客戶端將無法連接服務(wù)端程序。下面的代碼演示了在服務(wù)端關(guān)閉Socket后,客戶端是所何反應(yīng)的。

    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();
               
            }
        }
    }

      測(cè)試
    執(zhí)行下面的命令

    java server.CloseSocket
    java server.Client

    運(yùn)行結(jié)果

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

    從上面的運(yùn)行結(jié)果可以看出例程Client并未拋出SocketException異常。而在012行的read方法返回了-1。如果將socket.close去掉,客戶端的read方法將處于阻塞狀態(tài)。這是因?yàn)?/span>Java在發(fā)現(xiàn)無法從服務(wù)端的Socket得到數(shù)據(jù)后,就通過read方法返回了-1。如果將011行的注釋去掉,Client就會(huì)拋出一個(gè)SocketException異常。大家可以試試,并socket.close行改成serverSocket.close后,客戶端就會(huì)拋出連接異常:

    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)

    顯式地調(diào)用close方法關(guān)閉ServerSocket并不是必須的,在程序退出時(shí)將自動(dòng)關(guān)閉ServerSocket。但通過close方法關(guān)閉ServerSocket,可以使其他的ServerSocket對(duì)象綁定該端口。可以使用ServerSocket類的isClosedisBound方法判斷ServerSocket是否處于活動(dòng)狀態(tài),如下面的代碼所示:

     

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

    上面代碼所示的“非活動(dòng)狀態(tài)”可能是serverSocket對(duì)象已經(jīng)關(guān)閉,也可能是serverSocket對(duì)象是使用ServerSocket類的默認(rèn)構(gòu)造方法創(chuàng)建的,而且未調(diào)用bind方法綁定端口。在這里要注意的是isBound方法返回true并不意味著serverSocket對(duì)象處于活動(dòng)狀態(tài),調(diào)用close方法并不會(huì)將綁定狀態(tài)置為false。這一點(diǎn)和Socket類的isConnected方法類似。

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






    Android開發(fā)完全講義(第2版)(本書版權(quán)已輸出到臺(tái)灣)

    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) 評(píng)論(3)  編輯  收藏 所屬分類: java 原創(chuàng)網(wǎng)絡(luò)編程

    評(píng)論

    # re: Java網(wǎng)絡(luò)編程從入門到精通(27):關(guān)閉服務(wù)端連接  回復(fù)  更多評(píng)論   

    不錯(cuò)啊
    2009-08-04 11:39 | 凡客誠品

    # re: Java網(wǎng)絡(luò)編程從入門到精通(27):關(guān)閉服務(wù)端連接  回復(fù)  更多評(píng)論   

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

    # re: Java網(wǎng)絡(luò)編程從入門到精通(27):關(guān)閉服務(wù)端連接  回復(fù)  更多評(píng)論   

    非常不錯(cuò)..

    http://www.qixian.net
    http://www.nod32id.com
    http://www.fanke1.com
    http://www.du84.com
    2009-08-04 17:20 | 不錯(cuò)
    主站蜘蛛池模板: 成人免费无码视频在线网站| 亚洲三级中文字幕| 午夜小视频免费观看| 久久精品国产大片免费观看| 免费国产va在线观看| 中国亚洲呦女专区| 亚洲精品动漫在线| 久久精品亚洲视频| 国产国拍精品亚洲AV片| 亚洲国产av无码精品| 日韩免费视频播放| 成人免费视频试看120秒| 97碰公开在线观看免费视频| 少妇无码一区二区三区免费| 三上悠亚电影全集免费| 免费精品久久久久久中文字幕| 亚洲国产欧美日韩精品一区二区三区| 亚洲国产av高清无码| 亚洲精品高清国产麻豆专区| 亚洲一本综合久久| 亚洲AV无码乱码国产麻豆| 亚洲日本va中文字幕久久| 亚洲情侣偷拍精品| 亚洲色欲久久久久综合网| 可以免费观看一级毛片黄a| 国产精品免费视频播放器| 免费无码又爽又刺激高潮的视频| 久久精品免费一区二区喷潮| 精品久久久久久久久免费影院| 亚洲毛片免费视频| 最近最新高清免费中文字幕| 黄色免费在线网站| 免费国产黄网站在线观看| 99热精品在线免费观看| 亚洲最大免费视频网| 国产成人免费网站| 国产极品美女高潮抽搐免费网站| 免费一级毛片免费播放| 国产精品亚洲产品一区二区三区| 亚洲深深色噜噜狠狠爱网站| 久久亚洲国产视频|