免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6320 | 回复: 7
打印 上一主题 下一主题

socket 下利用send recv 如何实现完整文件的读取传送 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-25 16:08 |只看该作者 |倒序浏览
想法:服务器端利用send函数,一行一行的发送文本,浏览器段利用recv函数接受一行,然后解析
问题1:想法可不可行?如何判断服务器断数据发送完毕?网上看了点知识,对socket缓冲区不是很理解?这个socket缓冲区是不是就是send函数里的buff?
问题2:为了实现本想法,是不是需要客户端不停send才能不停的接受?
买的unix网络编程还没到,所以问比较白痴的问题,谢谢大家!!


ps:客户端用了curse库,接受到的数据打印输出后有部分乱码和问号,有时候一次运行出现带问号的乱码,再运行一次就出现:connectiong reset by peer ,对此大家有什么意见??

谢谢~~

论坛徽章:
0
2 [报告]
发表于 2009-10-25 21:49 |只看该作者

回复 #1 computerzanz 的帖子

自己顶~~

论坛徽章:
0
3 [报告]
发表于 2009-10-26 16:06 |只看该作者

回复 #2 computerzanz 的帖子

55555,大家随便说点自己的想法把,别光看不说阿

论坛徽章:
0
4 [报告]
发表于 2009-11-02 17:30 |只看该作者
参考下这个帖子:
http://bbs.chinaunix.net/viewthr ... p;extra=&page=1
可能其中有些许问题,不能希望那能给你做个示范。
PS:现在牵扯到通讯的,我都不习惯socket了。直接ICE上,比较省事,让开发人专注于业务而不是通讯过程

论坛徽章:
0
5 [报告]
发表于 2009-11-02 20:34 |只看该作者

回复 #1 computerzanz 的帖子

这是一个简单的socket编程问题,socket只是提供一个连接方式而已,具体如何实现传输要自己设计。
比如如何判断发送完毕,很简单,你循环调用recv,知道recv返回的值为零的时候,就表明服务器没有发送任何数据了,这时候发送完毕。
实现的方法有很多,可以使用fork或者select,推荐使用select来进行socket编程,这样系统不会阻塞,而且服务器发送完文本以后,可以再发一个完毕信号给客服端,比如字符串“Finished”,这样当客户端接收到数据以后,先与字符串“Finished”进行比较来判断是否发送完毕。

至于socket的缓冲区和send里面的buffer不是一个概念,你可以把socket看成一个FIFO,服务器往fifo里面写东西,客户端从fifo里面读数据,一个不断的写,一个不断的读,如果一方停止写,那么另一个之后将读不到任何东西。那么这个fifo有多大呢,一般默认是64k,这个就是socket的缓冲区,当然也可以自己更改这个缓冲区的大小。但是send函数里面的buffer参数一般来说都比64k要小很多,这个buffer的大小需要根据自己的实际情况来设置,如果文本不是很大的话,一般不要设置得太大,以免发生数据丢失的情况。

论坛徽章:
0
6 [报告]
发表于 2009-11-04 14:44 |只看该作者

回复 #5 buaadallas 的帖子

谢谢!!
自己实现了 文件从传送,原理和你说的一样
谢谢

论坛徽章:
0
7 [报告]
发表于 2013-01-23 11:25 |只看该作者
为什么要这样做呢?不觉得麻烦,而且效率不搞么?用sendfile发送整个文件,发送之前加上一个长度,就OK了!!!

论坛徽章:
7
天蝎座
日期:2013-09-28 10:45:42双子座
日期:2013-10-16 16:27:09射手座
日期:2013-10-23 10:21:32处女座
日期:2014-09-17 16:44:332015年亚洲杯之巴林
日期:2015-04-09 17:28:01冥斗士
日期:2015-11-26 16:19:0015-16赛季CBA联赛之山东
日期:2018-03-02 23:59:31
8 [报告]
发表于 2013-03-21 21:33 |只看该作者
最简单的方法,

如果是TCP方式,服务器端发送玩文本文件,就直接close(fd),客户端一旦read返回0,就证明了服务器发送完毕。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP