gpt4 book ai didi

c++ - C++ 中的指针——需要解释它是如何工作的

转载 作者:行者123 更新时间:2023-11-30 03:09:36 24 4
gpt4 key购买 nike

http://www.codeproject.com/KB/IP/SocketFileTransfer.aspx?artkw=socket%20send%20a%20file我不清楚这一行://先获取文件大小

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 个字节,仅一次接收 他们如何接收 dataLength 和数据?它会先发送数据长度然后再发送数据吗?

最佳答案

哦。有趣的数组运算。这个想法是从末尾数起,这样当你到达末尾时你就知道你已经完成了。碎片:
1.找到dataLength (BYTE*)(&dataLength)
的地址 2.跳到dataLength的末尾 + sizeof(dataLength)
3. 备份我们期望接收的字节数 - cbLeftToReceive
这是我们写入从网络获得的字节的地方。

当我们从网络获取字节时,我们减少 cbLeftToReceive (cbLeftToReceive -= cbBytesRet;) 并继续尝试接收字节直到我们完成。所以每次通过循环,bp 指向我们需要写入下一个字节的地方,我们接收()。

编辑:

现在我们知道我们将获得多少字节,我们如何接收它们而不可能用大量数据填充所有 RAM?我们得到一个缓冲区,重复填充它,并在缓冲区不为空时将其刷新到磁盘。当仍有大量数据(超过缓冲区)等待接收时,我们尝试 Receive() 填充缓冲区。当缓冲区不足时,我们只请求到文件末尾。

  iiGet = (cbLeftToReceive<RECV_BUFFER_SIZE) ?                       cbLeftToReceive : RECV_BUFFER_SIZE ;  iiRecd = sockClient.Receive( recdData, iiGet );

我们捕获并处理错误。如果没有错误,写入我们得到的字节数,并将我们期望接收的字节数减少到我们得到的字节数。

  destFile.Write( recdData, iiRecd); // Write it  cbLeftToReceive -= iiRecd;

如果我们还没有完成接收字节,回到顶部继续。

  while ( cbLeftToReceive > 0 );

一般建议:练习阅读你不太注意错误处理和异常处理代码的代码是很好的。通常,剩下的内容更容易理解。

关于c++ - C++ 中的指针——需要解释它是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4003018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com