社区
通信技术
帖子详情
两个在WSAAsyncSelect异步操作中的问题
naile
2001-10-31 10:39:35
我有两个在WSAAsyncSelect异步操作中的问题一直不太明白:
1、怎样使回调函数响应FD_WRITE事件,即我要向网络的另一端发送信息,怎样使回调函数接收到FD_WRITE事件?
2、如果我接受的信息不是固定类型的,如有时我要接受数值型的信息,有时是字符型的,且不同类型的信息对应不同的操作,该如何处理?
...全文
151
5
打赏
收藏
两个在WSAAsyncSelect异步操作中的问题
我有两个在WSAAsyncSelect异步操作中的问题一直不太明白: 1、怎样使回调函数响应FD_WRITE事件,即我要向网络的另一端发送信息,怎样使回调函数接收到FD_WRITE事件? 2、如果我接受的信息不是固定类型的,如有时我要接受数值型的信息,有时是字符型的,且不同类型的信息对应不同的操作,该如何处理?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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()函数该如何编写?
http
异步
请求例子(W
saAs
ync
Select
模式)
一个用纯WinSock写的Http
异步
请求的例子,初学WinSock的可以看一看
c++基于W
SAAs
ync
Select
的C/S程序
支持多个客户端和服务端通信,在vs2017编译通过
W
SAAs
ync
Select
详细使用说明
W
SAAs
ync
Select
基于Windows消息机制
异步
I/O模型,为特定网络事件指定系统通知信息.
异步
套接字网络通信
基于c/s的
异步
网络通信,有服务器,客户端,W
SAAs
ync
Select
,客户端连接服务器,可以进行相互的通信
windows下的
异步
网络(服务器客户端)
在windows下
异步
服务服务器和客户端,vs工程项目,大于2008基本都能编译通过和运行
通信技术
4,386
社区成员
28,916
社区内容
发帖
与我相关
我的任务
通信技术
通信技术相关讨论
复制链接
扫一扫
分享
社区描述
通信技术相关讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章