网络编程 WsaasyncSelect 中要响应多个客户端的连接和传输问题,高手讨论
要用到多线程吧,网上资料很少,多线程的都是 事件模型 的。
最重要的是
1,怎么保存和每个客户端通讯的套接字?用列表保存吗?
2,如果每个客户端起个线程,线程函数可以重入吗?
3,从什么地方起线程呢?
LRESULT CTPServerDlg::OnSock(WPARAM wParam,LPARAM lParam)
{
SOCKET socketAccept;
if(WSAGETSELECTERROR(lParam))
return 0;
switch(WSAGETSELECTEVENT(lParam))
{
case FD_ACCEPT:
socketAccept=accept(m_socketSrv,NULL,NULL);
if(socketAccept==SOCKET_ERROR)
{
return 0;
}
if(SOCKET_ERROR==WSAAsyncSelect(socketAccept,m_hWnd,UM_SOCK,FD_READ|FD_CLOSE))
{
return 0;
}
break;
case FD_READ:
//DWORD dwThreadId;
AfxBeginThread((AFX_THREADPROC)ReadThread,&wParam);
break;
case FD_CLOSE:
closesocket((SOCKET)wParam);
break;
default:
break;
}
return 1;
}
UINT ReadThread(LPVOID pParam)
{
return 0;
}
这是个框架代码,高手一定要指点。