1.Socket Api 版本:
在Windows平臺上主要有兩個版本的Socket Api函數:
WinSock 1.1 和 WinSock 2.2,2.2版本默認兼容1.1版本,
1.1 winsock.h wsock32.lib winsock.dll
2.2 winsock2.h ws2_32.lib ws2_32.dll
2.0版本的Socket比1.1的多了一些高級的功能,如:
多重協議支持:通過SPI接口支持其他協議;
多重命名空間:根據服務與主機名選擇協議;
重疊I/O模式:增強I/O吞吐量與提高性能;
分散與聚合:從多個緩衝區發送與接收數據;
有條件接受:有選擇性地決定是否接受連接;
套接字共享:多個進程共享一個套接字句柄。
一般大家看到的WSA開頭的都是WinSock2.2新增的函數。
2.Socket套接字類型:
比較常用的包括:流式套接字(使用TCP),數據報套接字(使用UDP),原始套接字等等。
TCP與UDP各有優缺點:
TCP:面向連接、穩定、需要資源多;
UDP:面向無連接(一般情況下)、不穩定、需要資源少。
用手機打電話時面向連接的,用手機發短信是面向無連接的,目前來說網絡上比較常用的是TCP類型的套接字。
本教程中也使用TCP Socket類型。
TCP與UDP的區別
- 基於連接與無連接
- 對系統資源的要求(TCP較多,UDP少)
- UDP程序結構較簡單
- 流模式(TCP)與數據報模式(UDP)
TCP保證數據正確性,UDP可能丟包
TCP保證數據順序,UDP不保證
具體編程時的區別
- socket()的參數不同
- UDP Server不需要調用listen和accept
- UDP收發數據用sendto/recvfrom函數
- TCP:地址信息在connect/accept時確定
UDP:在sendto/recvfrom函數中每次均 需指定地址信息 - UDP:shutdown函數無效
部分滿足以下幾點要求時,應該採用UDP 面向數據報方式
- 網絡數據大多爲短消息
- 擁有大量Client
- 對數據安全性無特殊要求
- 網絡負擔非常重,但對響應速度要求高
TCP Socket通信流程:
TCP是面向連接的,UDP是面向無連接的。
3.TCP 類型 Socket 程序開發流程:
TCP服務端:WSASartup、socket、bind、listen、accept、read、write、closesocket、WSACleanup。
TCP客戶端:WSASartup、socket、connect、read、write、closesocket、WSACleanup。