無論是使用哪種協議,無論是客戶端還是服務端,在使用Socket進行通信之前,首先要完成Winsock庫的初始化工作,之后應該創建Socket對象,用它進行網絡通信。使用Socket這個API函數可以完成該功能,函數原型如下。
SOCKET socket( int af, //指定套接字使用的地址格式 int type, //套接字類型 int protocol //套接字協議類型 );
第一個參數af用來指定套接字使用的地址格式,對於Windows下的Winsock庫所支持的地址族值為AF_INET。
第二個參數type用來指定套接字的類型,通常有如下類型。
SOCK_STREAM //流套接字,TCP協議使用的有連接的可靠傳輸類型 SOCK_DGRAM //數據報套接字,UDP使用的無連接的不可靠的傳輸類型
第三個參數protocol用來指定Socket對象所使用的協議類型,通常有如下類型。
IPPROTO_TCP //TCP協議 IPPROTO_UDP //UDP協議
然而當type為SOCK_STREAM值時,就指明是用於TCP協議,為SOCK_DGRAM值時,就指明是用於UDP協議。所以這兩種情況下protocol參數可以是0。函數執行成功則返回一個socket對象,否則返回INVALID_SOCKET(-1),可以使用WSAGetLastError函數獲得錯誤代碼。