1. 程式人生 > >網路程式設計、常用的通訊協議、Socket套接字程式設計(Socket和ServerSocket)、埠號

網路程式設計、常用的通訊協議、Socket套接字程式設計(Socket和ServerSocket)、埠號

網路程式設計:
    java語言中,提供了一套統一的程式設計介面。很多細節都已經底層化。
           所在,可以進行無痛的網路通訊程式設計。
           提供的是Socket套接字技術。
 --常用的通訊協議:
   (1)TCP/IP:在通訊之前,需要建立連線,通訊之後需要斷開連線,
                       一般會有一個做為伺服器端,有一個做為客戶端。
                       主要將通訊模式分成四個層:         
               1)應用層    
               2)傳輸層    
               3)IP層  
               4)程式設計介面層                           
   (2)UDP:   不需要建立連結,相對來說,開銷比較小,效率高。
 --型別:java.net.InetAddress
                  提供了用於獲取和描述主機和IP的資訊功能
      常用方法:
    static InetAddress getByName(String host):  
                                            返回一個指定字串主機的地址物件
                                            主機名:可以使用IP來描述,還可以使用域名來描述(通常域名會繫結一個IP地址)   
    String getHostName():
                                            返回用於描述主機的字串名稱
    String getHostAddress():
                                            返回用於描述主機的IP地址
    static InetAddress getLocalHost():
                                            返回本地主機地址物件 
 --套接字程式設計:
   (1)Socket:
                在客戶端使用,連線成功後會獲取一個Socket物件
   (2)ServerSocket:
                在伺服器端使用建立伺服器端套接字物件,當被連線成功後,
                會獲取一個Socket物件。
       
          注意:通訊時使用各自獲取的Socket物件來通訊的。    
       
 --程式設計步驟:
   1)伺服器物件
   2)伺服器等待被連線
   3)客戶端連線伺服器(成功與否)
   4)客戶端與伺服器進行通訊
   5)斷開連線
              
              
 --埠號:是一個16位的無符號二進位制整數,範圍0~65535。
               和IP一起是用來指定一個執行中程式的位置。
               所以這麼說:
                              埠號是執行中程式的唯一識別符號,即
                              程式執行時,埠號不能碰撞。                
                              通常0~1023是作業系統預定義的埠號,所以我們在
                              自定義時,應該儘可能的使用1024~65535這個範圍內
                              的數。
 --ServerSocket類的使用:
         構造器:
                    ServerSocket(int port);
                                        建立一個指定埠號的ServerSocket物件


         常用方法:
         Socket accept():
                                              等待客戶端連線,返回客戶端的Socket物件 
         void close():        
                                              關閉此套接字    
         InetAddress getInetAddress():
                                              獲取伺服器端的本地地址
         int getLocalPort():
                                              獲取伺服器端的埠號
         SocketAddress getLocalSocketAddress():
                                              返回此套接字繫結到的端點的地址。 
             
 --Socket類的使用:
        構造器:
                  Socket(String host,int port);
                                    向指定主機名和指定埠號的服務傳送請求連線,
                                    連線成功,會獲取Socket物件。


        常用方法:
               void close():
                                      關閉套接字        
               InetAddress getInetAddress(): 
                                      返回套接字所連線伺服器的地址
               int  getPort():
                                      返回套接字所連線遠端機器的埠號
               int  getLocalPort():
                                      返回本地的埠
               InputStream getInputStream():
                                      獲取輸入流物件,接收遠端機器傳送的資訊
               OutputStream getOutputStream():
                                      獲取輸出流物件,向遠端機器傳送資訊   

               setSoTimeout(int timeout):設定超時時長
                                      在實際應用中,程式可能不想讓執行網路連線、讀取伺服器資料的程序一直阻塞,
                                      而是希望當網路連線、讀取操作超過合理時間之後,
                                      系統自動認為該操作失敗,
                                      這個合理時間就是超時時長                                  
  
=======================================================================================
補充:
        IP地址:32位整數   202.9.128.88
                      用於唯一地標識網路上的一個通訊實體,
         埠:
           
     加入多執行緒:伺服器端應該為每個Socket單獨啟動一個執行緒,
                            每個執行緒負責與一個客戶端進行通訊,
                            該執行緒負責讀取從客戶端傳送過來的資料,
                            並將讀到的資料“廣播”給其他客戶端,
                            因此,需要在伺服器端使用Map來儲存所有的Socket
                            
  URL:統一資源定位器
                它是指向網際網路”資源“的指標,
                通常情況下,URL可以由協議名、主機名、埠、資源組成
      eg:  protocol://host:port/resourceName
                http://www.crazyit.org/index.php
  
  URLConnection:應用程式和URL之間的通訊連線
                            程式可以通過URLConnection例項向該URL傳送請求、讀取URL引用的資源
                     ###:如果既要使用輸入流讀取URLConnection響應的內容,
                            又要使用輸出流傳送請求引數,
                            則一定要先使用輸出流,再使用輸入流
  HttpURLConnection:應用程式與URL之間的HTTP連線      
  
  URLPermission工具類:管理HttpURLConnection的許可權問題