Winsock TCP应用程序缓冲区

时间:2014-01-31 12:58:03

标签: tcp winsock

我最近一直在使用winsock api,我发现当我增加发送器的缓冲区大小并将未使用的字节填充为零时,接收器也会将这些零附加到文件的末尾。如果我使用的应用程序缓冲区更多,比如3072我在另一端收到的文件似乎已损坏,并且由于附加了零而显得很明显。但它在2048,1024的缓冲区工作正常,在这些情况下,在发送之前附加了零。怎么会被腐蚀而不是另一个?

1 个答案:

答案 0 :(得分:1)

  

当我增加发送方的缓冲区大小并将未使用的字节填充为零时,接收方还会将这些零附加到文件的末尾。

所以这些字节没有被使用过'一点都不你发了他们。您在发送函数调用中使用了错误的计数。

  

如果我使用的应用程序缓冲区更多,比如3072,我在另一端收到的文件似乎已损坏,并且由于附加了零而显得很明显。

正确。

  

但它在2048,1024的缓冲区工作正常,在这些情况下,在发送之前附加了零。怎么会被腐蚀而不是另一个?

因为您的代码中存在一个只有较大缓冲区大小才会暴露的错误。您发送的文件可能是2048字节的倍数,因此您的文件结束错误未被曝光。

没有看到你的代码就不可能确定,但​​很可能你忽略了当你从文件中读取并返回整个缓冲区时返回的计数,而不是仅仅发送' count'字节。这在文件结束时失败了,但是在他阅读的任何其他时间它也没有填写它没有义务做的缓冲区。