網絡編程基礎知識彙總

Java是一種平臺無關的編程語言,具有“一次編寫、到處運行”的特點,所以非常適合網絡編程。可以說,在網絡編程方面沒有任何一門語言比Java更優秀。

網絡基本概念
計算機網絡,就是把分佈在不同地理區域的計算機與專門的外部設備用通信線路互連成一個規模大、功能強的網絡系統,從而使衆多的計算機可以方便地互相傳遞信息,共享硬件、軟件、數據信息等資源。
網絡體系結構:國際標準化組織ISO於l978年提出“開放系統互連參考模型”,即著名的OSI(Open System Interconnection)模型。該模型把計算機網絡分成物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層等七層。
通信協議 計算機網絡中實現通信必須有一些約定,即通信協議。對速率、傳輸代碼、代碼結構、傳輸控制步驟、出錯控制等制定標準。
TCP協議:提供可靠的數據傳輸服務的規則。
IP協議進行IP數據包的分割和組裝

IP地址和端口號
IP地址:爲實現網絡中不同的計算機之間的通信,在網絡中的每臺機器都必須有一個與衆不同的標識,這就是IP地址(IP Address)。
格式:數字型、32位、由4段8位的二進制數組成。一般表示爲十進制形式(4個0~255的十進制整數),中間用圓點隔開,如:166.111.78.98。
域名地址:也是分段表示的,便於記憶的、字符串形式。
端口:一個16位的整數,用於表示數據交給哪個通信程序處理。因此,端口就是應用程序與外界交流的出入口,它是一種抽象的軟件結構,包括一些數據結構和I/O(基本輸入/輸出)緩衝區。
InetAddress:用於描述IP地址的對象
InetAddress類沒有提供構造方法,而是提供了兩個靜態方法來獲取InetAddress實例 getByName(String host):根據主機獲取對應的InetAddress對象。 getByAddress(byte[] addr):根據原始IP地址來獲取對應的InetAddress對象。
UDP( User Datagram Protocol )協議是用戶數據報,在網絡中它與TCP協議一樣用於處理數據包。在OSI模型中,在第四層——傳輸層,處於IP協議的上一層。
在網絡質量令人不十分滿意的環境下,UDP協議數據包丟失會比較嚴重。但是由於UDP的特性:它不屬於連接型協議,因而具有資源消耗小,處理速度快的優點,所以通常音頻、視頻和普通數據在傳送時使用UDP較多,因爲它們即使偶爾丟失一兩個數據包,也不會對接收結果產生太大影響。比如聊天用的ICQ和OICQ就是使用的UDP協議。 
DatagramSocket類:創建接收和發送UDP的Socket實例
DatagramSocket():創建實例。通常用於客戶端編程,它並沒有特定監聽的端口,僅僅使用一個臨時的。
DatagramSocket(int port):創建實例,並固定監聽Port端口的報文。
DatagramSocket(int port, InetAddress localAddr):這是個非常有用的構建器,當一臺機器擁有多於一個IP地址的時候,由它創建的實例僅僅接收來自LocalAddr的報文。
receive(DatagramPacket d):接收數據報文到d中。receive方法產生一個“阻塞”。
send(DatagramPacket d):發送報文d到目的地。
setSoTimeout(int timeout):設置超時時間,單位爲毫秒。
close():關閉DatagramSocket。在應用程序退出的時候,通常會主動釋放資源,關閉Socket,但是由於異常地退出可能造成資源無法回收。所以,應該在程序完成時,主動使用此方法關閉Socket,或在捕獲到異常拋出後關閉Socket。

發送端
建立udpsocket服務端點。該端點建立,系統會隨機分配一個端口。如果不想隨機配置,可以手動指定。 DatagramSocket ds = new DatagramSocket(9002);
將數據進行packet包的封裝,必須要指定目的地地址和端口。 byte[] buf = "wo shi shu ju".getBytes(); DatagramPacket dp =new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.254"),9001);
通過socket服務的send方法將該包發出。 ds.send(dp);
將socket服務關閉。主要是關閉資源。 ds.close();
接收端
建立udp的socket服務。要監聽一個端口。 DatagramSocket ds = new DatagramSocket(9001);
定義一個緩衝區,將該緩衝區封裝到packet包中。 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length);
通過socket的receive方法將數據存入數據包中。 ds.receive(dp);
通過數據包dp的方法getData()、getAddress()、getPort()等方法獲取包中的指定信息。
關閉socket。 ds.close();
ServerSocket:編寫TCP網絡服務程序,首先要用到java.net.ServerSocket類用以創建服務器Socket
構造方法:
ServerSocket(int port):創建綁定到特定端口的服務器套接字
ServerSocket(int port, int backlog):利用指定的backlog(服務器忙時保持連接請求的等待客戶數量),創建服務器套接字並將其綁定到指定的本地端口號。
ServerSocket(int port, int backlog, InetAddress bindAddr):使用指定的端口、偵聽 backlog 和要綁定到的本地 IP 地址創建服務器。
Socket:客戶端要與服務器建立連接,必須先創建一個Socket對象
常用構造方法
Socket(String host, int port):創建一個流套接字並將其連接到指定主機上的指定端口號。
Socket(InetAddress address, int port):創建一個流套接字並將其連接到指定 IP 地址的指定端口號。

發佈了55 篇原創文章 · 獲贊 21 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章