天天看點

Java網絡教程之Socket

建立socket

下面的示例代碼是連接配接到ip位址為78.64.84.171伺服器上的80端口,這台伺服器就是我們的web伺服器(www.jenkov.com),而80端口就是web服務端口。

我們也可以像如下示例中使用域名代替ip位址:

socket發送資料

代碼非常簡單,但是想要通過網絡将資料發送到伺服器端,一定不要忘記調用flush()方法。作業系統底層的tcp/ip實作會先将資料放入一個更大的資料緩存塊中,而緩存塊的大小是與tcp/ip的資料包大小相适應的。(譯者注:調用flush()方法隻是将資料寫入作業系統緩存中,并不保證資料會立即發送)

socket讀取資料

代碼也并不複雜,但需要注意的是,從socket的輸入流中讀取資料并不能讀取檔案那樣,一直調用read()方法直到傳回-1為止,因為對socket而言,隻有當服務端關閉連接配接時,socket的輸入流才會傳回-1,而是事實上伺服器并不會不停地關閉連接配接。假設我們想要通過一個連接配接發送多個請求,那麼在這種情況下關閉連接配接就顯得非常愚蠢。

是以,從socket的輸入流中讀取資料時我們必須要知道需要讀取的位元組數,這可以通過讓伺服器在資料中告知發送了多少位元組來實作,也可以采用在資料末尾設定特殊字元标記的方式連實作。

關閉socket

當使用完socket後我們必須将socket關閉,斷開與伺服器之間的連接配接。關閉socket隻需要調用socket.close()方法即可,代碼如下: