现在 用户创建完套接字以后
可以使用该套接字进行数据的发送和接收操作
为了方便用户书写代码
可以通过函数WSAAsyncSelect()将套接字设置为异步模式
即有相应消息到来时才调用相应的代码
将客户端设置为异步模式
应该首先自定义消息
然后声明消息响应函数
最后设置异步套接字
首先,在头文件“网络通信2Dlg.h”中
调用消息WM_SOCKT
#define WM_SOCKT WM_USER+1
然后 在头文件中声明消息响应函数
保护属性设置为public
afx_msg void Onsockt1(WPARAM wParam,LPARAM lParam);
最后 设置套接字为异步模式并在消息响应函数中添加代码 代码如下
... //省略部分代码
::WSAAsyncSelect(s,this->m_hWnd,WM_SOCKT,FD_READ|FD_ACCEPT);//设置异步套接字
void CMy2Dlg::Onsockt1(WPARAM wParam,LPARAM lParam)//消息响应函数
{
switch(lParam)
{
case FD_READ: //处理读取事件
char s2[100]={0},ssa[20000];
CString data="";
sockaddr_in add;
::memset(&add,0,sizeof(add)); //套接字地址结构变量
::getpeername(s,(SOCKADDR*)&add,(int*)sizeof(add));
//获取对方ip地址
recv(s,s2,100,NULL);//接收数据
GetDlgItem(IDC_EDIT1)->GetWindowText((LPTSTR)ssa,20000);
data+=(LPTSTR)ssa; //格式化数据
data+="\r\n"; //换行
data+=::inet_ntoa(add.sin_addr); //转换ip地址顺序
data+="对您说:";
data+=s2;
GetDlgItem(IDC_EDIT1)->SetWindowText(data); //设置界面
}
}
先设置异步模式
等消息来了再处理
Onsockt1是消息响应函数
代码只处理FD_READ消息
字符串要先初始化成空字符串
套接字是 ip地址+端口
复制套接字时 要开一个内存空间
接收的数据要格式化
为了美观 直白要换行
处理完数据就把数据显示在界面上