完成端口模型里如何知道接收的数据大小
我服务端使用的完成端口,准备写一个接收客户端传送文件的程序。因为文件很大,一次只传部分字节,那我服务端怎么知道一次实际传送来的数据有多少?
这是我接收函数:
BOOL CIOCPServer::PostRecv(CPerSocketData *pSockData)
{
ASSERT(pSockData != NULL);
WSABUF wsaBuf = {0};
COverLappedEx *m_pOverLap = new COverLappedEx(IO_TYPE_READ);
m_ArrOverLapEx.AddTail(m_pOverLap);
wsaBuf.buf = m_pOverLap->m_szBuf;
wsaBuf.len = m_pOverLap->m_len;
DWORD dwBytesRecv = 0, dwFlags = 0;
int iRet = WSARecv(pSockData->m_Socket, &wsaBuf, 1, &dwBytesRecv, &dwFlags, &(m_pOverLap->m_OLap), NULL);
if (iRet != NO_ERROR) {
if (WSAGetLastError() != WSA_IO_PENDING) {
return FALSE;
}
}
return TRUE;
}
其中给wsaBuf赋值了:
wsaBuf.buf = m_pOverLap->m_szBuf;
wsaBuf.len = m_pOverLap->m_len;
但是这个len是缓冲区的总大小。。。接收到数据之后没变……
接收数据的时候m_szBuf保存的是数据。。就是不知道有多少是接收到的数据。。求指教
[解决办法]
完成端口会告诉你操作完成了多少字节。
看API的文档去。