基于Python通过socket在windows和linux之间进行文件传输

公司的项目开发在linux下进行编译(Ubuntu16.04),但是需要在windows中进行更新,所以需要进行文件的传输,为了熟悉socket的操作,自己写的socket程序

由于参考的是网上的程序,基本思路就是,首先发送一次数据,(一个buf就可以传完),包含文件名和文件大小,使用

struct.calcsize('128sl')

计算大小,然后使用

struct.pack()

进行打包,发送之后开始发送文件数据

细节将来再说(其实也没啥细节了),反正测试的效果就是

  • 当服务器和客户端都在windows平台的时候,文件传输没有问题;
  • 当服务器和客户端都在linux平台的时候,文件传输也是没有问题的;
  • 服务器在linux,客户端在windows,文件传完损坏;
  • 服务器在windows,客户端在linux,文件传完损坏;

但即使文件损坏,大小是一样的

纠结了半天不知道是为什么,以为是字节序之类的问题,后来突发奇想用hex查看器(npp的hex viewer插件)看了一下,发现接收到的文件开头莫名有4个空字节,后面与原文件又是一样的,相应的,最后的4个字节不见了,想来想去,考虑到可能是前面发送的文件信息的问题,于是尝试用

len()

获取了一下发送的文件信息的长度,发现竟然不一样!!

明明都是用相同的128sl进行的打包,结果竟然是不同的,于是进行测试,发现

基于Python通过socket在windows和linux之间进行文件传输_第1张图片
测试结果.PNG

l的长度是不一样的,这太糟心了……

后来的实现方式是使用128si,一段时间是能用了,但是后来又出现了问题,具体原因我还没找到,找到了再来更新~~

你可能感兴趣的:(基于Python通过socket在windows和linux之间进行文件传输)