公司的项目开发在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
进行的打包,结果竟然是不同的,于是进行测试,发现
l
的长度是不一样的,这太糟心了……
后来的实现方式是使用128si
,一段时间是能用了,但是后来又出现了问题,具体原因我还没找到,找到了再来更新~~