社区
通信技术
帖子详情
两个在WSAAsyncSelect异步操作中的问题
naile
2001-10-31 10:39:35
我有两个在WSAAsyncSelect异步操作中的问题一直不太明白:
1、怎样使回调函数响应FD_WRITE事件,即我要向网络的另一端发送信息,怎样使回调函数接收到FD_WRITE事件?
2、如果我接受的信息不是固定类型的,如有时我要接受数值型的信息,有时是字符型的,且不同类型的信息对应不同的操作,该如何处理?
...全文
132
5
打赏
收藏
两个在WSAAsyncSelect异步操作中的问题
我有两个在WSAAsyncSelect异步操作中的问题一直不太明白: 1、怎样使回调函数响应FD_WRITE事件,即我要向网络的另一端发送信息,怎样使回调函数接收到FD_WRITE事件? 2、如果我接受的信息不是固定类型的,如有时我要接受数值型的信息,有时是字符型的,且不同类型的信息对应不同的操作,该如何处理?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
caiyi9000
2001-11-01
打赏
举报
回复
to naile():
我没误会你的意思,你大概还没完全看懂我介绍的方法和异步非阻塞Winsock的工作机制。
你在void CXXXDlg::a()中,用send(m_socket, ...)发送网络数据时,在你定义的m_socket上就会发生FD_WRITE事件,你的应用程序自动就会走到OnSend()中,不信你试试。
同样你在客户端用connect(m_socket, ...)向服务器发出连接请求时,在m_socket上也会发生FD_CONNECT事件。在得到服务器回应后(或超时),你的客户端程序会自动走到OnConnect(int errcode)中,errcode是传进来的错误代码,你在OnConnect(int errcode)中判断errcode,若为0,则连接服务器成功!若不成功,传进来的errcode将是非0的数,你可以通过errcode得到连接不成功的具体原因。
naile
2001-11-01
打赏
举报
回复
up
caiyi9000
2001-10-31
打赏
举报
回复
1.你用WSAAsyncSelect(Sock, hWnd, WM_NETMESSAGE, FD_CONNECT ¦ FD_CLOSE ¦ FD_READ ¦ FD_WRITE) 把Sock设置异步模式时,hwnd就是你的主窗口句柄,你的网络异步事件都投递到此窗口。而WM_NETMESSAGE就是需要你自己定义的网络异步事件。
#define WM_NETMESSAGE WM_USER+166
然后你自己增加消息映射
ON_MESSAGE(WM_NETMESSAGE,OnNetMessage)
其中OnNetMessage()就是网络异步事件的回调函数,由你自己定义,在里面可以读出各种网络异步事件,并进行相应处理。一般定义如下:
void OnNetMessage(WPARAM wParam, LPARAM lParam)
{
//得到发生此网络异步事件的套接字
SOCKET CurSock = (SOCKET)wParam;
//得到网络事件类型
int iEvent = WSAGETSELECTEVENT(lParam);
switch(iEvent)
{
case FD_ACCEPT: //客户端连接请求
{
//做接受连接工作
OnAccept(CurSock);
break;
}
case FD_CLOSE: //客户端断开事件:
{
OnClose(CurSock);
break;
}
case FD_READ: //网络数据包到达事件
{
OnReceive(CurSock);
break;
}
case FD_WRITE: //发送网络数据事件
{
OnSend(CurSock);
break;
}
default: break;
}
}
你可以参考我在开发文档中发表的文章《Winsock开发网络通信程序的经典入门》
2.SOCKET传输的都是字符型(BYTE)数据,读到后,你自己程序里做相应转换,并做相应处理。
hellion
2001-10-31
打赏
举报
回复
1、如:WSAAsyncSelect(Sock, hWnd, WM_MYMSG, FD_CONNECT | FD_CLOSE | FD_READ | FD_WRITE)
2、接收到的数据自己分析,本身无所谓什么类型
naile
2001-10-31
打赏
举报
回复
to:caiyi9000(只懂Winsock)
第二个问题已懂,但是第一个问题可能你弄错了我的意思,我所说的是比如说我的程序中有一个按钮,单击此按钮响应函数---void CXXXDlg::a(),我想在单击此按钮后程序发出一个信息,程序的回调函数就用你在《Winsock开发网络通信程序的经典入门》中的例子,CXXXDlg::a()函数该如何编写?
TcpScan(Console&MFC)
里面分为
两个
程序,一个是Console下面的,一个是MFC的,其
中
Console
中
socket是阻塞
select
模式,MFC下面的是W
SAAs
ync
Select
异步
非阻塞模式。 都是利用Tcp Connect扫描端口,都可以批量ip,批量端口扫描,都是多线程的...
网络编程实用教程(第三版).zip
8.2 W
SAAs
ync
Select
异步
I/O模型 212 8.3 WSAEvent
Select
事件选择模型 216 8.4 重叠I/O模型 221 8.4.1 重叠I/O模型的优点 221 8.4.2 重叠I/O模型的基本原理 221 8.4.3 重叠I/O模型的关键函数和数据结构 ...
vc++ 开发实例源码包
[2]
异步
选择 - W
SAAs
ync
Select
[3]---事件选择 - WSAEvent
Select
[4]---重叠I [5]---完成端口 IP所在地查询器 如题。 jpeglib_demo 处理Jpeg图片。 KeyHook 键盘钩子,截获键盘信息。 Kugou7+UI 界面设计。学习...
W
SAas
ync
Select
异步
选择消息模型
W
SAas
ync
Select
异步
选择消息模型适用于简单对效率要求不太高的windows窗口程序。 该模型windows为用户封装好了线程调用,以消息的方式通知accep/recv等事件是否已经发生,不用一直阻塞等待。 下面是这种模型的...
通信技术
4,356
社区成员
28,926
社区内容
发帖
与我相关
我的任务
通信技术
通信技术相关讨论
复制链接
扫一扫
分享
社区描述
通信技术相关讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章