请教关于recv()函数的一些问题。。。C/C++ code// ...WSAAsyncSelect(temClient, m_hWnd, WM_CLIENT_READCLOS
请教关于recv()函数的一些问题。。。
C/C++ code// ...WSAAsyncSelect(temClient, m_hWnd, WM_CLIENT_READCLOSE, FD_READ|FD_CLOSE);// ...LRESULT CChatServerDlg::OnReceiveData(WPARAM wParam, LPARAM lParam){ char headBuff[sizeof(stMsgHeader)]; memset(headBuff, 0, sizeof(headBuff)); int num = 0; switch (WSAGETSELECTEVENT(lParam)) { case FD_READ: recv(m_LinkList.GetAt(m_LinkList.FindIndex(i)), headBuff, strlen(headBuff), 0); break; }}
如上代码:
因为strlen(headBuff)始终为0,所以,程序将不停调用OnReceiveData()函数。
运行结果也正是这样。
我的问题是:
1:那是不是用recv()接收发来的数据时,若未接收完,服务器将一直触发自定义的OnReceiveData()回调函数??
2:OnReceiveData()函数是不是只能调用一次recv()?
我曾尝试在客户端每次发两次相同的数据:
strDst = _T("1");
send(g_ServerSocket, strDst.GetBuffer(0), strDst.GetLength(), 0);
strDst = _T("2");
send(g_ServerSocket, strDst.GetBuffer(0), strDst.GetLength(), 0);
服务端这边也接收两次,但是第2次就不成功了,返回SOCKET_ERROR
而如果只接收一次,则接收的值竟是"12"
3:如果OnReceiveData()函数里没有调用recv(),那是不是整个函数都不会被执行??
我试过,如果把recv()函数删掉,OnReceiveData()函数就不会被触发,而加上,才会触发,非常诡异,这叫什么逻辑?!
[解决办法]????????、
[解决办法]淡淡的vvd