急求socket跨unix和windows平台文件传输方法
大家好,小弟遇到一个很烦人的问题,是这样的,原来我们有unix下socket文件传输的程序,大体是这样的:server开个守护进程,然后client端创建socket连接,如果是client端给server传呢,client先通过stat函数得到本地文件的长度,通过socket先把这个文件长度发给server,server收到后就知道了,回传一个信息给client表示确认。双方事先约定好传送的包的长度,比如512,然后通过文件总长度除以512就知道要传多少“文件块”以及最后一个“文件块”的长度。然后client就开始通过for循环,开始fread,然后send;server那边就通过for循环开始recv,然后fwrite。这样就完成了文件传输。
可是我们现在要把client挪到windows下来,而server的尽量不动,我把代码移植过来了,开始传了一个很小的文件,没看出有啥问题,后来我尝试传了一个rar的压缩包,发现格式损坏,又尝试传了有很多行的文本文件,也不完全正确,我突然想起来windows和unix对回车换行的解释不同,windows换行是一个换行+回车,unix就一个换行啥的,我通过stat函数测试发现,果然同样的文本文件,在win平台和unix下得到的长度不同,愁死我了,怎么解决呢?
还得尽量不动server的程序,只改client的代码,但是在win这边,文件长度就不同,请求高人指点啊!谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
自己去看下FTP协议的实现呗 ~
楼上的高人,请明示,你让我看协议,我鸭梨好大
要使用二进制模式打开文件。
回复 4# pagx
二进制模式?可是server端不是通过二进制写的啊,现在不想改server端的程序,而且使用二进制模式的话,文本文件又传的不对了吧……
按二进制传不会有问题吧?
二进制传文本也没有问题吧?
“server端不是通过二进制写的”这只能说明你server写的有问题,去改server程序吧
使用二进制模式任何文件都ok的
换行符传过去又有啥不可,为神马要换行符加回车符
此外,win和linux文件大小不同,我表示很难理解。lz确定是同一文件,还是你分别在两个系统上编辑的文件
linux这边所有文件一视同仁,没有什么二进制不二进制的概念的。。。
win端用二进制打开试试。
估计是字节序的问题,hton,ntoh