大佬教程收集整理的这篇文章主要介绍了通过套接字传输文件,最终大小用较少的字节,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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);
通过本地TCP / IP套接字使用时,它可以正常工作,但不能以慢速连接方式使用.我通过调试看到我得到了很多64字节的块,并且在EOF附近有一个30字节的块.我知道你可以在read()上获得更少的字节,因为当任何数据(> 1个字节)可用时调用返回.但这种情况不应该被赶上吗?应该在N == 0时返回,那就是不再有数据(EOF).
谢谢你的帮助.
(编辑)
发送代码如下:
while (n=read(file_fd,buffer,BUFSIZE)) { write (sdaccept,n) }
我知道read()和write()都可以返回N< BUFSIZE,但是这个循环不应该相应吗?我加了n并返回1000000,确切的大小. (编辑II) 使用10673字节的C源测试,接收10575没有损坏,除了目标文件LACKS前98字节!
如果底层子系统拒绝接收更多数据(例如,网络子系统可能有一个队列供数据发送且此队列已满),则write()/ send()可能决定部分写入或根本不写入.这很可能是因为连接速度很慢.
发送方应检查write()的返回值,以检测实际写入的数据量并进行相应调整.
写应该以这样的方式完成:
int readamount; while( readamount = read(file_fd,BUFSIZE) > 0 ) { int @R_11_10586@lWritten = 0; do { int actualWritten; actualWritten = write (sdaccept,buffer + @R_11_10586@lWritten,readamount - @R_11_10586@lWritten); if( actualWritten == - 1 ) { //some error occured - quit; } @R_11_10586@lWritten += actualWritten; } while( @R_11_10586@lWritten < readamount ); }
以上是大佬教程为你收集整理的通过套接字传输文件,最终大小用较少的字节全部内容,希望文章能够帮你解决通过套接字传输文件,最终大小用较少的字节所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。