通过TCP传输大数据时,为什么最后一个包接收端收不到?
我是采用异步I/O的方式:
(1)发送端:
....
int nLeft;
nLeft = FileLength;//将要发送的BM
通过TCP传输大数据时,为什么最后一个包接收端收不到?发送端都发完了,但接收端接收不到最后一个包. 我是采用异步I/O的方式: (1)发送端: .... int nLeft; nLeft = FileLength;//将要发送的BMP数据的长度. int idx; idx = 0; while (nLeft > 0) { //SendFileInf[SendFileIndex].pFileMemoryAddr为将要发送的数据缓冲区地址 ret = send(SendDataSock, SendFileInf[SendFileIndex].pFileMemoryAddr + idx, nLeft, 0); if (ret == SOCKET_ERROR) { AfxMessageBox("Send() BMP Data Error!"); break; } nLeft -= ret; idx += ret; } .... (2)接收端: case FD_READ: //m_SendProc[nIndex][0].SendID为接收端套接字,pbuff为缓冲区 ret = recv(m_SendProc[nIndex][0].SendID, pbuff, 1024, 0);//接收数据 // m_SendProc[nIndex][FileNo].pFileMemoryAddr为接收数据缓冲区. //m_SendProc[nIndex][FileNo].CurRecvFileLen为每次接收到的数据的累积长度. memcpy(m_SendProc[nIndex][FileNo].pFileMemoryAddr + m_SendProc[nIndex][FileNo].CurRecvFileLen, pbuff, ret); m_SendProc[nIndex][FileNo].CurRecvFileLen += ret; //调试时显示接收到的包的长度. TRACE("m_SendProc[nIndex][FileNo].CurRecvFileLen is %d", m_SendProc[nIndex][FileNo].CurRecvFileLen); //清空缓冲区 ZeroMemory(pbuff, 1024); break; 这样,在调试时大数据堆栈,接收端显示收到的数据长度要比发送端少最后一个包. (编辑:拼字网 - 核心网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |