📄 15.6.2 ~创建并初始化套接字.txt
字号:
15.6.2 ~创建并初始化套接字
接着,为 CChatDlg类增加一个 SOCKET类型的成员变量 : m_socket,即套接宇描述符,并将其访
问权限设置为 private类型。然后为 CChatDlg类添加一个 BOOL类型的成员函数: InitSocket,用
来初始化该类的套接字成员变量,该函数的实现代码如例 1 5-9所示。
例。 15-9
11创建并初始化套接字
BOOL CChatDlg : : InItSocket ()
11创建套接字
m_ socket=socket(AF_INET, SOCK_DGRAM ,0) ;
if(INVALID_SOCKET==m_socket)
{
MessageBox ( "套接字创建失败!" ) ;
return FALSE;
}
SOCKADDR_IN addrSock;
addrSock.sin_family=AF_INET;
addrSock.sin-por t=htons(6000) ;
addrSock.sin_addr.S_un.S_addr=htonl (INADDR_ANY) ;
int retval ;
11绑定套接字
retval=bind(m_socket , (SOCKADDR*)&addrSock, sizeof(SOCKADDR));
if(SOCKET_ERROR==retval)
{
closesocket(m_socket);
MessageBox("绑定失败!");
return FALSE;
}
return TRUE;
在上述例 15-9所示的初始化套接字的函数中,首先调用 socket函数创建一个套接字,因为对于聊
天这种网络程序来说,通常都是采用基于 UDP协议来实现的,所以本例中将 socket函数的第二个参
数设置为 SOCK_DGRAM,以创建数据报类型的套接字。如果没有错误发生, socket函数返回创建的
套接宇描述符,否则返回VALID_SOCKET,这时可以提示用户:"套接字创建失败!",然后InitSocket
函数返回 FALSE
本例实现的 Chat程序既包含了接收端的功能,又包含了发送端的功能。对接收端程序来说,它需要
绑定到某个 IP地址和端口上,所以 InitSocket函数中,接着定义了一个地
址结构体 SOCKADDR IN类型的变量 : addrSock,并对其成员分别进行赋值。第一个成员指定地址族;
第二个成员指定端口,本例使用 6000;第三个成员指定 IP地址,本例让 Chat程序能够接收发送到
本地的任意 E地址的数据。接下来就调用 bind函数将套接字与指定的 E和端口绑定了。如果没有错
误发生, bind函数返回 0;否则返回 SOC阻T_ERROR,这时调用 closesocket关闭套接字,并提示用
户:"绑定失败!",然后, InitSocket返回 FALSE。
最后,如果上述操作都成功实现, InitSocket函数返回 TRUE。这就是在 InitSocket函数中对套接
字进行初始化的处理过程。然后可以在 CChatD lg类的 OnlnitDialog函数中调用这个函数,以便使
程序完成套接字的初始化工作,添加代码如例 15-10所示代码中加灰显示的那行语句。
例 15-10
BOOL CChatDlg: :OnInitDialog() CDialog: : On工ni tDialog ( ) ;
// TODO : Add e x tra工 nitialization here
InitSocket() ;
return TRUE; // return TRUE unless you set the focus to a control
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -