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

          Java網絡編程從入門到精通(30):定制accept方法

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

          上一篇:Java網絡編程從入門到精通(29):服務端Socket的選項

          使用ServerSocket類的implAccept方法可以使用accept方法返回一個Socket子類對象。但implAcceptprotected方法,因此,必須在ServerSocket類的子類中覆蓋accept方法,然后在accept方法中使用implAccept方法重新設置Socket對象。implAccept方法的定義如下:

          protected final void implAccept(Socket s) throws IOException

          只要通過implAccept方法設置一個未連接的Socket子類對象,accept方法就會返回一個已經連接的Socket子類對象(accept返回的是Socket對象,要想得到Socket子類對象,必須進行類型轉換)。在大多數時候不需要改變accept方法的行為,但有時需要一個有更多特性的Socket類。通過implAccept方法就可以達到這個目的。下面的代碼定義了一個從Socket繼承的HttpSocket類,這個類除了具有Socket類的一切特性外,還增加了一個方法getRequestHeaders,用于返回HTTP請求的頭信息。

            package server;
            
            
          import java.net.*;
            
          import java.io.*;
            
            
          class HttpSocket extends Socket
            {
                
          public String getRequestHeaders() throws Exception
                {
                    InputStreamReader isr 
          = new InputStreamReader(getInputStream());
                    BufferedReader br 
          = new BufferedReader(isr);
                    String s 
          = "", result = "";
                    
          while (!(s = br.readLine()).equals(""))
                        result 
          = result + s + "\r\n";
                    
          return result;
                }
            }
            
            
          class HttpServerSocket extends ServerSocket
            {
                
          public HttpServerSocket(int port) throws IOException
                {
                    
          super(port);
                }
                
          public Socket accept() throws IOException  // 覆蓋accept方法
                {
                    Socket s 
          = new HttpSocket();
                    implAccept(s);   
          // 將accept方法返回的對象類型設為HttpSocket
                    return s;
                }
            }
            
          public class CustomAccept
            {
                
          public static void main(String[] args) throws Exception
                {
                    HttpServerSocket httpServerSocket 
          = new HttpServerSocket(1234);
                    HttpSocket httpSocket 
          = (HttpSocket) httpServerSocket.accept();
                    System.out.println(httpSocket.getRequestHeaders()); 
          // 向控制臺輸出HTTP請求頭
                    httpServerSocket.close();
                }
            }

          測試

             執行如下命令:

          java server.CustomAccept

          在IE的地址欄中輸入如下Url: 

          http://localhost:1234

          CustomAccept在控制臺中的運行結果:   

          GET / HTTP/1.1
          Accept: */*
          Accept-Language: zh-cn
          UA-CPU: x86
          Accept-Encoding: gzip
          , deflate
          User-Agent: Mozilla/
          4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; InfoPath.2)
          Host: localhost:1234
          Connection: Keep-Alive

              上面的運行結果就是IE向服務端發出的HTTP請求頭的內容。這個運行結果會根據客戶機配置的不同而有所差異。

          下一篇:
          Java網絡編程從入門到精通(31):非阻塞I/O簡介





          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-15 16:57 銀河使者 閱讀(2864) 評論(4)  編輯  收藏 所屬分類: java 原創網絡編程

          評論

          # re: Java網絡編程從入門到精通(30):定制accept方法[未登錄]  回復  更多評論   

          http://www.jinshan365.com/bbs
          2009-08-15 23:29 | wang

          # re: Java網絡編程從入門到精通(30):定制accept方法[未登錄]  回復  更多評論   

          這樣啊`~
          2009-08-15 23:29 | wang

          # re: Java網絡編程從入門到精通(30):定制accept方法[未登錄]  回復  更多評論   

          http://www.jinshan365.com/home
          2009-08-15 23:30 | wang

          # re: Java網絡編程從入門到精通(30):定制accept方法  回復  更多評論   

          不錯哦11
          2009-08-16 11:05 | 戴爾筆記本
          主站蜘蛛池模板: 靖西县| 安阳县| 上林县| 万安县| 延安市| 富平县| 丰顺县| 济南市| 昆山市| 会宁县| 南宁市| 武宁县| 玛曲县| 莱州市| 钟山县| 博白县| 哈巴河县| 阳朔县| 双峰县| 且末县| 宁都县| 博爱县| 郯城县| 萨嘎县| 拉萨市| 福建省| 吉安市| 郎溪县| 黄浦区| 龙山县| 明水县| 池州市| 原阳县| 七台河市| 巴彦淖尔市| 安顺市| 固安县| 延长县| 西城区| 尤溪县| 青海省|