QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1173|回复: 10

求linux下实现文件传输的方法

[复制链接]
发表于 2005-11-7 17:16:33 | 显示全部楼层 |阅读模式
想开发一个在linux环境下开发一个在网络上进行文件传输的程序。可是用socket的send和recv函数每次只能收发有限的字节,谁能给个更好的办法,可以传任何类型的文件,就像qq中的文件传输那样的。
发表于 2005-11-7 18:16:20 | 显示全部楼层
啊。。。。。。。。。。。循环send啊
回复

使用道具 举报

 楼主| 发表于 2005-11-7 19:03:53 | 显示全部楼层
怎么循环?
把文件打开?读一段,send一段?
这样是不是不能保证所有类型的文件都能发送。
可不可以说的详细一点
回复

使用道具 举报

发表于 2005-11-7 19:09:50 | 显示全部楼层
只要以二进制方式打开文件就没有问题的了
最近为了应付学校的实验,几个字符串处理的程序也都是直接用二进制方式打开的--把所有字节数据通通当做特殊的字符处理--省事   
回复

使用道具 举报

 楼主| 发表于 2005-11-7 20:10:29 | 显示全部楼层
谢谢你的建议,我试试看看
回复

使用道具 举报

发表于 2005-11-7 20:12:37 | 显示全部楼层
不说socket,就是简单的大文件拷贝也是读一段写一段的啊。
用open,read,write直接就是二进制的。
回复

使用道具 举报

发表于 2005-11-7 23:12:08 | 显示全部楼层
还可以通过 mmap 映射内存,然后直接发送出去……接收端肯定是一段一段处理的,但是发送端没有关系。
回复

使用道具 举报

发表于 2005-11-8 00:31:24 | 显示全部楼层
如果使用read函数
将它的第二个参数设为BUFSIZ
如果读取的内容大小不到BUFSIZ
read是否会一直阻塞直到接收到的内容满足BUFSIZ的大小呢?
回复

使用道具 举报

发表于 2005-11-8 06:04:02 | 显示全部楼层
除非:
1、fcntl 设置了非阻塞模式
2、流出错或遇见 EOF
回复

使用道具 举报

发表于 2005-11-8 13:24:25 | 显示全部楼层
明白了
谢谢
我去试试
回复

使用道具 举报

发表于 2005-11-8 22:01:00 | 显示全部楼层
用sendfile系统调用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-3 04:21 , Processed in 0.055263 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表