微科社区,轻松开发从此开始! 请登陆 免费注册

微科社区

当前位置:首页 > 编程语言 > C/C++ > VC/MFC > 网络编程 >

WSAAsyncSelect多线程的问题?

时间:2017-01-11 04:01  浏览:努力统计中...
最近由于工作的需要,采用MFC写一网络测试工具,就是通过MFC界面多个帐户登录服务器。 我采用WSAAsyncSelect的方式,接收数据。 由于是多个Socket,所以我采用数组的方式存放Socket。 C/
最近由于工作的需要,采用MFC写一网络测试工具,就是通过MFC界面多个帐户登录服务器。
我采用WSAAsyncSelect的方式,接收数据。
由于是多个Socket,所以我采用数组的方式存放Socket。
C/C++ code
WSAAsyncSelectm(Socket2[index].m_hSocket, this->m_hWnd, UM_SOCKET, FD_READ | FD_CLOSE);


When one of the nominated network events occurs on the specified socket s, the application window hWnd receives message wMsg. The wParam parameter identifies the socket on which a network event has occurred. The low word of lParam specifies the network event that has occurred. The high word of lParam contains any error code.
消息处理函数的wParam就是对应的socket
可是在消息里面我该怎么接收指定的Socket消息咧。。。。现在一个用户登录就有没问题,多个用户就出问题了
C/C++ code
LONG CjwtDlg::OnSock(WPARAM wParam, LPARAM lParam){ switch(LOWORD(lParam)) { case FD_READ: { UCHAR szBuf[1024] = {0}; int nLen = 0; nLen =m_Socket2[0].Receive(szBuf,1024); int lpPoint = 0; while(nLen > 0) { } } break; case FD_CLOSE: m_bConnect = FALSE; break; default: break; } return 0;}


wParam表示发生网络事件的套接字,根据它在OnSock中过滤

SOCKET sock = (SOCKET)wParam


查找是哪个SOCKET有数据包进来

C/C++ code
LRESULT CChatServerDlg::OnRead(WPARAM wParam, LPARAM lParam){ if (WSAGETSELECTEVENT(lParam) == FD_READ) { CString s; int i; for(i=0;(i<20)&&(SocketAccept[i]!=wParam);i
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线------