社区
通信技术
帖子详情
两个在WSAAsyncSelect异步操作中的问题
naile
2001-10-31 10:39:35
我有两个在WSAAsyncSelect异步操作中的问题一直不太明白:
1、怎样使回调函数响应FD_WRITE事件,即我要向网络的另一端发送信息,怎样使回调函数接收到FD_WRITE事件?
2、如果我接受的信息不是固定类型的,如有时我要接受数值型的信息,有时是字符型的,且不同类型的信息对应不同的操作,该如何处理?
...全文
145
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提供了多种
异步
I/O模型,如W
SAAs
ync
Select
和WSAEvent
Select
,这
两个
模型都是为了处理多个网络事件而设计的,避免了程序因等待网络
操作
完成而陷入阻塞状态。 W
saAs
ync
Select
模式是其
中
之一,它允许应用程序...
c++基于W
SAAs
ync
Select
的C/S程序
总的来说,"c++基于W
SAAs
ync
Select
的C/S程序"是一个典型的网络编程示例,展示了如何在Windows环境下使用C++和Winsock API实现高效的
异步
网络通信。通过这个项目,开发者可以学习到网络编程的基本原理,包括套接字的...
W
SAAs
ync
Select
详细使用说明
`W
SAAs
ync
Select
` 是一个基于 Windows 消息机制的
异步
I/O 模型函数,它允许开发者为特定的网络事件指定系统通知信息。这使得应用程序能够在接收到网络事件(如连接建立或数据可读)时通过窗口消息来接收通知,而...
异步
套接字网络通信
而
异步
套接字则允许在
操作
进行时继续执行其他任务,通过事件驱动的方式处理网络事件。 在C/S(Client/Server)架构
中
,服务器通常监听特定端口,等待客户端的连接请求。一旦收到请求,服务器会创建一个新的套接字与...
通信技术
4,387
社区成员
28,918
社区内容
发帖
与我相关
我的任务
通信技术
通信技术相关讨论
复制链接
扫一扫
分享
社区描述
通信技术相关讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章