急求socket跨unix和windows平台文件传输方法

发布于 2022-10-15 08:53:52 字数 640 浏览 36 评论 0

大家好,小弟遇到一个很烦人的问题,是这样的,原来我们有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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

忆悲凉 2022-10-22 08:53:52

自己去看下FTP协议的实现呗  ~

十级心震 2022-10-22 08:53:52

楼上的高人,请明示,你让我看协议,我鸭梨好大

染柒℉ 2022-10-22 08:53:52

要使用二进制模式打开文件。

南冥有猫 2022-10-22 08:53:52

回复 4# pagx

    二进制模式?可是server端不是通过二进制写的啊,现在不想改server端的程序,而且使用二进制模式的话,文本文件又传的不对了吧……

∝单色的世界 2022-10-22 08:53:52

按二进制传不会有问题吧?
二进制传文本也没有问题吧?

“server端不是通过二进制写的”这只能说明你server写的有问题,去改server程序吧

月下客 2022-10-22 08:53:52

使用二进制模式任何文件都ok的

感受沵的脚步 2022-10-22 08:53:52

换行符传过去又有啥不可,为神马要换行符加回车符

此外,win和linux文件大小不同,我表示很难理解。lz确定是同一文件,还是你分别在两个系统上编辑的文件

拥抱没勇气 2022-10-22 08:53:52

linux这边所有文件一视同仁,没有什么二进制不二进制的概念的。。。
win端用二进制打开试试。

带上头具痛哭 2022-10-22 08:53:52

估计是字节序的问题,hton,ntoh

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文