Linux传图到windows下面图片错误?解决方法

如图这是在linux下的图:

Linux传图到windows下面图片错误?解决方法_第1张图片

下面这张图是通过socket传到windows上面的图

 Linux传图到windows下面图片错误?解决方法_第2张图片

 通过notepad++打开发现

Linux传图到windows下面图片错误?解决方法_第3张图片

Linux传图到windows下面图片错误?解决方法_第4张图片 

两张图的换行符不对,图片数据的长度也不对。

最开始我在想可能是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");

然后传输的图片就正确了!!!

虽然是很小的一个问题,但是真的耗费了我好多时间。记录一下这个问题,希望以后遇到能快速解决它。

你可能感兴趣的:(linux,C++,linux,windows,服务器)