两个在WSAAsyncSelect异步操作中的问题

naile 2001-10-31 10:39:35
我有两个在WSAAsyncSelect异步操作中的问题一直不太明白:
1、怎样使回调函数响应FD_WRITE事件,即我要向网络的另一端发送信息,怎样使回调函数接收到FD_WRITE事件?
2、如果我接受的信息不是固定类型的,如有时我要接受数值型的信息,有时是字符型的,且不同类型的信息对应不同的操作,该如何处理?
...全文
132 5 打赏 收藏 转发到动态 举报
写回复
用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()函数该如何编写?

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧