socket介紹

為了更清楚socket是什麼, 去翻了Oracle Java官方文件,
翻譯逐字稿, 最後從中整理出socket連線流程, 以及相關名詞定義,

以下是socket連線流程整理:
(以下會在每個流程分別以在server端和在client端各自在同一時間點發生什麼事方式說明)

server端: server有一個socket(socket含有特定的port number),這個socket用來等待&監聽來自client端的連線請求(原文: connection request);

client端: client知道server所位於的那台機器的主機名(原文: hostname)以及server的port number。為了和server連上線, client會在連線期間和一個local port number綁定(原文: be bound to a local port number), 至於這個local number是由系統指派給client的。

p.s下圖為client試圖向server發出連線請求:
--> 如果連線ok:
server端: server端接受到連線請求, 這時server會得到一個新socket(這個socket有著相同的local port和一個遠程端點(原文: remote endpoint), 而這個遠程端點內含client的位址和port)
p.s. 小結: server在此時共有2個socket:
             一個是原來的socket, 用來持續監聽來自client的連線請求;
             另一個是新的socket, 用來注意(原文: tending to)已連上線了的client有無什麼需求(原文: needs)。
             由上述可知, server有這2個socket才能同時做上述這兩件事。

client端: client在連線請求被server接受時, 會創建一個socket, 用來和server做溝通。
p.s.小結: 在此流程階段, client和sever現在可透過寫入(原文: writing to)或讀取(原文: reading from)他們的socket來做溝通。

p.s.下圖可看出已連上線的狀態(注意連線兩端皆有箭頭):

以上就是整個socket連線流程, 最後說明相關名詞定義:


1. socket定義: 一個socket是一個介於兩個在同一網絡(原文: network)運行的兩個程式間有著雙向通訊連接(原文: a two-way communication link)的一個端點。一個socket被綁定到一個port number, 因而TCP層可識別(原文: identify)某個data被預定(原文: be destined to)要送往的應用程式(原文: application)。

2. endpoint(端點)定義: 一個端點是一個IP位址和一個port number的結合(原文: combination)。每個TCP連線可被這兩個端點獨一無二地識別(原文: be uniquely identified)。這樣一來,你可以有多重(原文: multiple)連線介於你的主機(原文: host)和server間。

3. java.net package定義: java.net package在Java平台(原文: platform)提供了一個Socket Class, 這個Socket Class實作了介於在一網絡上,你的Java程式和另一個程式間的一個雙向連線的一側(原文: implements one side of a two-way connection)。Socket Class可以隱藏系統細節, 不依賴原生code, 可使用Java程式以一種平台無關的方式(原文: a platform-independent fashion)在一網絡上做溝通。

4. serverSocket Class定義: java.net包含了serverSocket Class, 這個serverSocket Class可實作(原文: implements)一個socket。這socket可用來監聽和接受來自client的連線。


補充: Socket Class的constructor和method API (其中有包括getInputStream()和getOutputStream()方法): 連結: https://docs.oracle.com/javase/7/docs/api/java/net/Socket.html



文章參考來源: 



留言

熱門文章