BOOL Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE, LPCTSTR lpszSocketAddress = NULL);
{
if (Socket(nSocketType, lEvent))
{
if (Bind(nSocketPort,lpszSocketAddress))
return TRUE;
int nResult = GetLastError();
Close();
WSASetLastError(nResult);
}
return FALSE;
}
参数1表示本socket的端口,缺省是0,如果要创建数据报的socket,则必须指定一个端口号。( 在C/S模型中,客户端端口一般缺省,服务器端口固定)
参数2表示本socket的类型,缺省是SOCK_STREAM,表示面向连接类型。
参数3是屏蔽位,表示希望对本socket监测的事件,缺省是FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE。
参数4表示本socket的IP地址字符串,缺省是NULL。
Create调用Socket函数创建一个socket,并把它捆绑在this所指对象上,监测指定的网络事件。参数2和3被传递给Socket函数,如果希望创建数据报的socket,不要使用缺省参数,指定参数2是SOCK_DGRM。
如果上一步骤成功,则调用bind给新的socket分配端口和IP地址。
nSocketPort
如果您希望 Windows 套接字选择的端口套接字或 0 开头使用众所周知的端口。
nSocketType
SOCK_STREAM或SOCK_DGRAM。
lEvent
位掩码,它指定在其中应用程序感兴趣的网络事件的组合。
FD_READ想要接收通知的准备工作以进行读取。触发对方OnReceive()
FD_WRITE想要接收通知的准备工作以进行写入。触发OnSend()
FD_OOB想要接收通知的带外数据的到达。
FD_ACCEPT想要接收通知的传入连接。
FD_CONNECT想要接收通知的已完成的连接。
FD_CLOSE想要接收通知的套接字关闭。
lpszSockAddress
指向一个包含连接的套接字,一个以点分隔的数字,如"128.56.22.8"的网络地址的字符串的指针。传递NULL字符串为此参数指示CAsyncSocket实例应侦听的所有网络接口上的客户端活动。
返回值
如果该函数成功,则非零值否则为 0 和特定错误代码可以检索通过调用GetLastError。 以下错误适用于该成员函数︰
在对话初始化中
BOOL CClientDlg::OnInitDialog()加入下列代码:
{
if (!AfxSocketInit())
{
AfxMessageBox("套接字初始化失败!");
return FALSE;
}
}
WSANOTINITIALISED成功AfxSocketInit使用此 API 之前必须发生。:
WSAENETDOWN Windows 套接字实现检测到的网络子系统失败。
WSAEAFNOSUPPORT不支持指定的地址族。
返回 WSAEINPROGRESS正在阻塞的 Windows 套接字操作。
WSAEMFILE没有更多的文件描述符。
WSAENOBUFS
没有缓冲区空间不可用。 无法创建套接字。WSAEPROTONOSUPPORT不支持指定的端口。
WSAEPROTOTYPE指定的端口是此套接字错误的类型。
WSAESOCKTNOSUPPORT指定套接字类型不支持此地址族中。