Winsock TCP应用程序缓冲区

Winsock TCP应用程序缓冲区,tcp,winsock,Tcp,Winsock,我最近一直在使用winsock api,我发现当我增加发送方的缓冲区大小并用零填充未使用的字节时,接收方也会将这些零附加到文件的末尾。如果我使用的应用程序缓冲区更多,比如说3072,我在另一端收到的文件似乎已损坏,而且由于附加了零,这似乎很明显。但它在缓冲区为20481024的情况下运行良好,在这些情况下,在发送之前附加了太多的零。为什么一个会被腐蚀而另一个却没有 当我增加发送方的缓冲区大小并用零填充未使用的字节时,接收方还将这些零附加到文件的末尾 所以字节根本就不是“未使用的”。是你送的。您在

我最近一直在使用winsock api,我发现当我增加发送方的缓冲区大小并用零填充未使用的字节时,接收方也会将这些零附加到文件的末尾。如果我使用的应用程序缓冲区更多,比如说3072,我在另一端收到的文件似乎已损坏,而且由于附加了零,这似乎很明显。但它在缓冲区为20481024的情况下运行良好,在这些情况下,在发送之前附加了太多的零。为什么一个会被腐蚀而另一个却没有

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

所以字节根本就不是“未使用的”。是你送的。您在发送函数调用中使用了错误的计数

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

但它在缓冲区为20481024的情况下运行良好,在这些情况下,在发送之前附加了太多的零。为什么一个会被腐蚀而另一个却没有

因为您的代码中有一个bug,只有较大的缓冲区才会暴露出来。可能您发送的文件是2048字节的倍数,因此您的文件结束错误没有暴露出来

如果没有看到您的代码,就不可能确定,但很可能您在读取文件并发送整个缓冲区时忽略了返回的计数,而不仅仅是发送“count”字节。这在文件末尾失败,但在他读取未填充缓冲区的任何其他时间也可能失败,这不是必须的