2014-01-31 41 views
0

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

回答

1

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

所以这些字节根本不是'未使用'的。你发给他们。您在发送函数调用中使用了错误的计数。

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

正确的。

但它在缓冲区为2048,1024的情况下正常工作,在这种情况下,在发送之前追加了零。一个人如何被腐化而不是另一个呢?

因为您的代码中只有较大的缓冲区大小存在缺陷。可能您发送的文件是2048字节的倍数,因此您的文件结束错误未被公开。

不看你的代码是不可能的,但很可能你忽略了从文件读取返回的计数,并发送整个缓冲区,而不是发送'count'字节。这在文件结尾处失败,但是在其他任何时候读取的文件都不能填充它没有义务做的缓冲区时也会失败。