首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络协议 >

请问关于recv()函数的一些有关问题。

2012-03-28 
请教关于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

热点排行