【網路協議-3】Socket
1.Socket(套接字):
Socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個呼叫介面(API),Socket只是為了更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,提供給我們一些最基本的函式介面。
- 流式套接字(SOCK_STREAM):
流式套接字用於提供面向連線、可靠的資料傳輸服務。該服務將保證資料能夠實現無差錯、無重複傳送,並按順序接收。流式套接字之所以能夠實現可靠的資料服務,原因在於其使用了傳輸控制協議,即TCP(The Transmission Control Protocol)協議。
- 資料報套接字(SOCK_DGRAM):
資料報套接字提供了一種無連線的服務。該服務並不能保證資料傳輸的可靠性,資料有可能在傳輸過程中丟失或出現數據重複,且無法保證順序地接收到資料。資料報套接字使用UDP(User Datagram Protocol)協議進行資料的傳輸。由於資料報套接字不能保證資料傳輸的可靠性,對於有可能出現的資料丟失情況,需要在程式中做相應的處理。
- 原始套接字(SOCK_RAW):
原始套接字(SOCKET_RAW)允許對較低層次的協議直接訪問,比如IP、 ICMP協議,它常用於檢驗新的協議實現,或者訪問現有服務中配置的新裝置,因為RAW SOCKET可以自如地控制Windows下的多種協議,能夠對網路底層的傳輸機制進行控制,所以可以應用原始套接字來操縱網路層和傳輸層應用。比如,我們可以通過RAW SOCKET來接收發向本機的ICMP、IGMP協議包,或者接收TCP/IP棧不能夠處理的IP包,也可以用來發送一些自定包頭或自定協議的IP包。網路監聽技術很大程度上依賴於SOCKET_RAW
常用函式:
建立Socket例項:
public Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType protocolType);
- addressFamily 引數指定 Socket 使用的定址方案
- socketType 引數指定 Socket 的型別
- protocolType 引數指定 Socket 使用的協議
例如建立TCP和UDP套接字:
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);