如图这是在linux下的图:
下面这张图是通过socket传到windows上面的图
通过notepad++打开发现
两张图的换行符不对,图片数据的长度也不对。
最开始我在想可能是socket传输数据不对,后来经过好多实验发现socket的数据是正确的,难道是保存file文件的时候把linux的 \n 转换成 \r\n 了?
然后经过我大量的测试发现也不是。
最后终于定位到问题所在:
二进制和文本模式的区别
1、在Windows系统中,文本模式下,文件以"\r\n"代表换行。若以文本模式打开文件,并用 fputs 等函数写入换行符"\n"时,函数会自动在"\n"前面加上"\r"。即实际写入文件的是"\r\n"。
2、在类 Unix/Linux 系统中文本模式下,文件以"\n"代表换行。所以 Linux 系统中在文本模式和二进制模式下并无区别。
原来是我的 fopen方法出错了!!
int fp = fopen_s(&mstream,phead->name, "w");
这里应该写成这样:
int fp = fopen_s(&mstream,phead->name, "wb");
然后传输的图片就正确了!!!
虽然是很小的一个问题,但是真的耗费了我好多时间。记录一下这个问题,希望以后遇到能快速解决它。