用Java開發網絡軟體非常方便和強大,Java的這種力量來自於他獨有的一套強大的用於網絡的API,這些API是一系列的類和接口,均位於包java.net和javax .net中。在這篇文章中我們將介紹套接字(Socket)慨念,同時以實例說明如何使用Network API操縱套接字,在完成本文後,你就可以編寫網路低端通訊軟體。
什麼是套接字(Socket)?
Network API是典型的用於基於TCP/IP網路Java程式與其他程式通訊,Network API依賴Socket進行通訊。 Socket可以看成在兩個程式進行通訊連接中的一個端點,一個程式將一段訊息寫入Socket中,該Socket將這段訊息傳送給另外一個Socket中,使這段訊息能傳送到其他程式中。如圖1
我們來分析一下圖1,Host A上的程式A將一段訊息寫入Socket中,Socket的內容被Host A的網路管理軟體訪問,並將這段訊息透過Host A的網路介面卡發送到Host B,Host B的網路介面卡接收到這段訊息後,傳送給Host B的網路管理軟體,網路管理軟體將這段訊息保存在Host B的Socket中,然後程式B才能在Socket中閱讀這段資訊。
假設在圖1的網路中加入第三個主機Host C,那麼Host A怎麼知道訊息被正確傳送到Host B而不是被傳送到Host C了呢?基於TCP/IP網路中的每一個主機均被賦予了一個唯一的IP位址,IP位址是一個32位的無符號整數,由於沒有轉變成二進制,因此通常以小數點分隔,如:198.163.227.6,正如所見IP位址均由四個部分組成,每個部分的範圍都是0-255,以表示8位元位址。
值得注意的是IP位址都是32位址,這是IP協定版本4(簡稱Ipv4)規定的,目前由於IPv4位址已近耗盡,所以IPv6位址正逐漸取代Ipv4位址,Ipv6位址已是128位元位址無符號整數。
假設第二個程式被加入圖1的網路的Host B中,那麼由Host A傳來的訊息如何能被正確的傳給程式B而不是傳給新加入的程式呢?這是因為每一個基於TCP/IP網路通訊的程式都被賦予了唯一的連接埠和連接埠號,連接埠是一個資訊緩衝區,用於保留Socket中的輸入/輸出訊息,連接埠號碼是一個16位元無符號整數,範圍是0-65535,以區別主機上的每一個程序(端口號就像房屋中的房間號),低於256的短口號保留給標準應用程序,比如pop3的端口號就是110,每一個套接字都組合進了IP位址、埠、埠號,這樣形成的整體就可以區別每一個套接字t,下面我們就來談兩種套接字:流套接字和自尋址數據套接字。
流套接字(Stream Socket)
無論何時,在兩個網絡應用程序之間發送和接收信息時都需要建立一個可靠的連接,流套接字依靠TCP協議來保證信息正確到達目的地,實際上,IP包有可能在網路中遺失或在傳送過程中發生錯誤,任何一種情況發生,作為接受方的TCP將聯繫發送方TCP重新發送這個IP包。這就是所謂的在兩個流套接字之間建立可靠的連結。
以上就是Java套接字程式設計(上)(1)的內容,更多相關內容請關注PHP中文網(www.php.cn)!