LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1304|回复: 7

请教socket编程时open与fopen的区别

[复制链接]
发表于 2007-4-24 10:27:13 | 显示全部楼层 |阅读模式
要写个linux下局域网文件传输的小工具  刚完成文件传输模块  做了下小测试  发现传几兆十几兆的小文件没问题  但400多兆的大文件 传完以后  虽然大小不差  但无法打开   

用的核心语句就是apue里面的readn和writen   一端open个文件readn后writen给套接字   另一端readn后  creat  然后writen写   

不知道为什么传小文件没问题  大文件却无法打开   还是说用fopen会好一些  

另外还有个小问题 就是有时候请求端发起连接的时候会出现connection reset by peer的问题   搜了以后知道是被接受端reset  在三次握手的时候  不过还是不知具体原因  因为这种情况好像只会出现在大负荷的服务器上   所以一直也没解决  时好时坏。。。
发表于 2007-4-24 13:51:49 | 显示全部楼层
Post by duanius
要写个linux下局域网文件传输的小工具  刚完成文件传输模块  做了下小测试  发现传几兆十几兆的小文件没问题  但400多兆的大文件 传完以后  虽然大小不差  但无法打开   

用的核心语句就是apue里面的readn和writen   一端open个文件readn后writen给套接字   另一端readn后  creat  然后writen写   

不知道为什么传小文件没问题  大文件却无法打开   还是说用fopen会好一些  

另外还有个小问题 就是有时候请求端发起连接的时候会出现connection reset by peer的问题   搜了以后知道是被接受端reset  在三次握手的时候  不过还是不知具体原因  因为这种情况好像只会出现在大负荷的服务器上   所以一直也没解决  时好时坏。。。

open是系统调用;fopen是C库函数,最后还是通过open来实现的。所以我想你的问题,不是在这里。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-24 15:27:35 | 显示全部楼层
Post by pupilzeng
open是系统调用;fopen是C库函数,最后还是通过open来实现的。所以我想你的问题,不是在这里。


应该是这样吧  但为什么小文件能拷贝大文件拷贝过去就打不开了呢   而且文件大小还没错  (传过去个电影 双击打开报错  但大小一样)
实在是百思不得其解啊   不知道诸位如何实现文件传输的呢。。。
回复 支持 反对

使用道具 举报

发表于 2007-4-24 22:16:54 | 显示全部楼层
什么叫无法打开!?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-24 23:52:28 | 显示全部楼层
就是双击的时候显示出错  无法打开
回复 支持 反对

使用道具 举报

发表于 2007-4-25 10:08:45 | 显示全部楼层
或者你可以再清楚描述下你的遇到的问题~~
比如:
出错后 该文件大小是多少,原来的文件又是多少?
原先的文件是否能够正常打开?
双击出错是在 windows下还是 linux中?
回复 支持 反对

使用道具 举报

发表于 2007-4-25 10:10:14 | 显示全部楼层
Post by duanius
就是双击的时候显示出错  无法打开

查看一下md5码是不是一样。
另外,我怀疑是因为行结束符的问题。楼主的问题,说得太含糊,没法更多的猜测。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-25 10:42:53 | 显示全部楼层
感谢诸位热心帮助   找到原因了   虽然我在服务器端保存文件的时候设置了后缀  查看新文件的时候也发现它显示后缀为rmvb  但在属性里  它的rmvb后面还跟了一个很奇怪的字符   把这个字符在属性里删掉就可以了   不过很奇怪的是这个字符哪里来的。。。。   为什么其他文件传输的时候没这个奇怪的字符  只是这个文件才有这种情况  而且这个多出来的奇怪字符只有在属性页才能看到  浏览器里看一切正常 就是rmbv格式  很费解  
再次感谢大家
回复 支持 反对

使用道具 举报

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

本版积分规则

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