无论是使用哪种协议,无论是客户端还是服务端,在使用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函数获得错误代码。