http://www.codeproject.com/KB/IP/SocketFileTransfer.aspx?artkw=socket%20send%20a%20file 我并不清楚地了解这一行: //获取文件的大小第一指针在C++ - 需要解释它是如何工作
cbLeftToReceive = sizeof(dataLength);
do
{
BYTE* bp = (BYTE*)(&dataLength) + sizeof(dataLength) - cbLeftToReceive;
cbBytesRet = sockClient.Receive(bp, cbLeftToReceive);
// test for errors and get out if they occurred
if (cbBytesRet == SOCKET_ERROR || cbBytesRet == 0)
{
int iErr = ::GetLastError();
TRACE("GetFileFromRemoteSite returned
a socket error while getting file length\n"
"\tNumber of Bytes received (zero means connection was closed) = %d\n"
"\tGetLastError = %d\n", cbBytesRet, iErr);
/* you should handle the error here */
bRet = FALSE;
goto PreReturnCleanup;
}
// good data was retrieved, so accumulate
// it with already-received data
cbLeftToReceive -= cbBytesRet;
}
while (cbLeftToReceive > 0);
我想知道如何得到它得到的文件大小到dataLength :)
此行:BYTE* bp = (BYTE*)(&dataLength) + sizeof(dataLength) - cbLeftToReceive;
这是正确的,bp是dataLength地址的一个字节指针,但+ sizeof(dataLength) - cbLeftToReceive
是什么意思?
我不认为该文件是那么小:4个字节,只是onc接收他们如何接收dataLength和数据?它先发送dataLength,然后发送数据吗?
你引用的代码中最令人担忧的部分是这个发送者和接收者都假定这个长度可以适合int。 (我仍然记得4GB的文件是无法想象的巨大的,现在我不认为它是这样的。) – 2010-10-23 08:43:33