我最近一直在使用winsock api,我发现当我增加发送器的缓冲区大小并将未使用的字节填充为零时,接收器也会将这些零附加到文件的末尾。如果我使用的应用程序缓冲区更多,比如3072我在另一端收到的文件似乎已损坏,并且由于附加了零而显得很明显。但它在2048,1024的缓冲区工作正常,在这些情况下,在发送之前附加了零。怎么会被腐蚀而不是另一个?
答案 0 :(得分:1)
当我增加发送方的缓冲区大小并将未使用的字节填充为零时,接收方还会将这些零附加到文件的末尾。
所以这些字节没有被使用过'一点都不你发了他们。您在发送函数调用中使用了错误的计数。
如果我使用的应用程序缓冲区更多,比如3072,我在另一端收到的文件似乎已损坏,并且由于附加了零而显得很明显。
正确。
但它在2048,1024的缓冲区工作正常,在这些情况下,在发送之前附加了零。怎么会被腐蚀而不是另一个?
因为您的代码中存在一个只有较大缓冲区大小才会暴露的错误。您发送的文件可能是2048字节的倍数,因此您的文件结束错误未被曝光。
没有看到你的代码就不可能确定,但很可能你忽略了当你从文件中读取并返回整个缓冲区时返回的计数,而不是仅仅发送' count'字节。这在文件结束时失败了,但是在他阅读的任何其他时间它也没有填写它没有义务做的缓冲区。