我试图通过C中的套接字接收一些文件.但是服务器向我发送了一个100字节文件的64字节数据包,我在目标文件上得到大约999902字节.
while ((n = read(sd, buffer_in, BUFSIZE ))) // BUFSIZE = 64
{
if(n<0)
{
printf("Fail.\n");
fclose(archivo);
return -1;
}
if(fwrite(buffer_in, n, 1, f) !=1 )
{
printf("fwrite error.\n");
fclose(archivo);
return -1;
}
bytes+=n;
}
printf("We received %d bytes", bytes);
Run Code Online (Sandbox Code Playgroud)
通过本地TCP/IP套接字使用时,它可以正常工作,但不能以慢速连接方式使用.我通过调试看到我得到了很多64字节的块,并且在EOF附近有一个30字节的块.我知道你可以在read()上获得更少的字节,因为当任何数据(> 1个字节)可用时调用返回.但这种情况不应该被赶上吗?应该在n == 0时返回,那就是不再有数据(EOF).
谢谢你的帮助.
(编辑)
发送代码如下:
while (n=read(file_fd, buffer, BUFSIZE))
{
write (sdaccept, buffer, n)
}
Run Code Online (Sandbox Code Playgroud)
我知道read()和write()都可以返回N <BUFSIZE,但是这个循环不应该相应地计算出来吗?我加了n并返回1000000,确切的大小.
(编辑II)
使用10673字节的C源测试,接收10575没有损坏,除了目标文件LACKS前98字节!