Socket

可處理跨越網路的資料傳輸與網路連線,其簡化了網路資料傳輸中的切割資料、封包、分段處理與資料重組等複雜程序,而將透過網路連線的資料傳輸,視為檔案資料流來處理。

理論上 Socket 是一種很簡單概念,要實作 Socket 的應用程式還必須搭配特定的通訊協定。

 

最早的 Socket Interface 是於1980年代,由加州柏克萊大學為支援 UNIX 作業系統上的 TCP/IP 應用所開發的 Socket 的介面,稱為 Berkekey Socket Interface,而其軟體則稱為 Berkeley Software Distribution (簡稱 BSD)。


● BSD;Berkeley Software Distribution

Berkeley Socket Interface 是一組介面函式,介於網路應用程式與作業系統及網路硬體之間,提供標準的函式,應用程式透過呼叫此函式,可發展具備有TCP/IP網路功能之應用。其在網路應用程式開發上分為兩大類:

1. Stream Socket

使用TCP (Transfer Control Protocol;傳輸控制協定) 傳送資料。除了提供無錯誤資料傳輸之外,並提供偵錯、復原及排序資料的功能,故可保證資料無誤送達,且到的順序與送出順序相同。

 

伺服端 用戶端

20110929_1.JPG  

20110929_2.JPG  

2. Datagram Socket

使用UDP (User Datagram Protocol;使用者資料元協定) 傳送資料,常用於傳遞少量資料上,所以 UDP 只保證資料一定會被送出去,但不保證資料會被收到,且若發生錯誤也不會重送,屬於單向的傳送類型。傳遞資料前不需先建立連線,因此雙方並無實際的連線關係存在(Connectionless Protocol)也無主從關係,資料只管從一方送出即可。

任一端

20110929_3.JPG  


●Java Socket

Java 支援網路的 API 共有:

java.net:Networking

javax.net.ssl:Networking with Secure Socket Layer (SSL)

java.rmi:Remote Method Invocation

javax.rmi:Remote Method Invocation for IIOP

java.nio.channels.ServerSocketChannel:New I/O Server Socket Channel

java.nio.channels.SocketChannel:New I/O Client Socket Channel

 

在 Stream Socket 的架構圖:

20110929_4.JPG  

 

在 Datagram Socket 的架構圖:

20110929_9.JPG  

 

 

●Microsoft Windows Socket API (WinSock API)

為 Microsoft 以 Berkeley Socket Distribution API 為基礎所發展出來的。共分為四大類:

1. BSD Socket API:主要功能在於建立 Socket 連線、傳送或接收資料。與主機建立連線等。

2. WinSock 延伸函數 (Extended API):因應 Windows 多工、事件導向與訊息導向的環境,以 BSD Socket API 為基礎而發展出的 WinSocke API 函數,為區別起見均以 WSA 為名稱開頭。

3. 轉換 (Conversion) 函數:主要用來將 32 bit 或 16 bit 的整數從主機位元順序 (Host Byte Order) 轉換為網路位元順序 (Network Byte Order),或是由網路位元順序轉換為主機位元順序。另外也提供 32 位元 IP 位址與 ASCII 位址之間的轉換。其也分為 BSD 與 Windows 延伸 API 兩種。

4. 資料庫(Database)函數:主要是在處理 IP Address 與主機名稱間的轉換,或是取得通訊協定或通訊埠等相關資訊。其也分為 BSD 與 Windows 延伸 API 兩種。

 

在 Stream Socket 的架構圖:

20110929_6.JPG  

 

 

在 Datagram Socket 的架構圖:

20110929_7.JPG  

 

 

●Microsoft WinSock Control

Microsoft WinSock Control 6.0 控制元件為 Microsoft Visual Basic 6.0 所附之控制元件 (MSWINSCK.OCX),其不是預設的控制元件,必須自行引用至專案中(→自訂工具箱→[COM 元件] Microsoft WinSock Control, version 6.0),且需註冊此 ActiveX Control 設計階段授權 (請參考)。

 

 

●Microsoft .NET Framework Class Library

 

 Microsoft WinSock Control 6.0 

 Microsoft WinSock API 

 

 Unmanaged Code 


 Microsoft .NET Framework
 Managed Code 


System.Net 為支援網路通訊協定之Class Library

1. 主機名稱及IP位址

2. DNS

3. URL (Uniform Resource Locators)、URI (Uniform Resource Identifiers)

4. 請求 Request 與回應Response

5. HTTP Cookie

6. 網路組態設定

7. 網路資訊

8. 網路認證Authentication與權限Permission

System.Net.Sockets 是以 Berkeley Socket Distrubution API 為基礎所開發的 Class Library

在 Stream Socket 的架構圖:

20110929_8.JPG  

 

在 Datagram Socket 的架構圖:

20110929_7.JPG  

 

除了 Socket 類別外,另外提供以下類別以簡化 TCP 與 UDP 應用程式之開發:

 

System.Net.Sockets.TcpListener TCP 伺服端應用程式

 

System.Net.Sockets.TcpClient TCP 用戶端應用程式

 

20110929_1.JPG   

 

System.Net.Sockets.UdpClient UDP 應用程式

20110929_2.JPG  

創作者介紹
創作者 tsuozoe 的頭像
tsuozoe

隨便寫寫的新天地

tsuozoe 發表在 痞客邦 留言(1) 人氣()


留言列表 (1)

發表留言
  • Jerome Chung
  • thanks,獲益良多