C语言通过socket传输文件

Henryinferno 2016-05-11 09:27:13
我使用c语言的库函数实现对文件的操作,从windows传一个文件到linux然后再把这个文件传到windows。如果txt里全是英文的话没问题(要传的文件默认是以ANSI编码的)但是有些中文字符传不了,我应该怎么传中文呢?
读写文件用的fread,fwrite,在网络中都是转换成(char *)以字节流形式传输的。
FILE *fp;
if((fp=fopen("test.txt","w"))==NULL)
{
qDebug()<<"open file failed!";
return;
}
int fileSize=msg[0];
char *buf;
buf=(char *)malloc(sizeof(fileSize)+1);
memset(buf,0,fileSize+1);
memcpy(buf,(char *)&msg[1],fileSize);

fwrite((char *)&msg[1],fileSize,1,fp);
fclose(fp);

...全文
956 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
汪宁宇 2016-05-17
  • 打赏
  • 举报
回复
用socket就忘掉进制、中英文,所有的都是二进制流,,char *类型的
oN5GrzoN 2016-05-16
  • 打赏
  • 举报
回复
中文、英文,都以二进制传,有什么区别
Henryinferno 2016-05-11
  • 打赏
  • 举报
回复
引用 6 楼 renwotao2009 的回复:
[quote=引用 4 楼 wsx199397 的回复:] [quote=引用 3 楼 renwotao2009 的回复:] 一楼的二进制方式应该没有问题
可以了。。C语言这种方式可以传送任何文件吗?比如word,图片视频文件等[/quote]可以[/quote] 那么像word这种直接打开文件读,然后创建个word文件再写就行了嘛,不用在程序逻辑中处理读的是word,txt还是其他类型的文件?
renwotao2009 2016-05-11
  • 打赏
  • 举报
回复
引用 4 楼 wsx199397 的回复:
[quote=引用 3 楼 renwotao2009 的回复:] 一楼的二进制方式应该没有问题
可以了。。C语言这种方式可以传送任何文件吗?比如word,图片视频文件等[/quote]可以
赵4老师 2016-05-11
  • 打赏
  • 举报
回复
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
Henryinferno 2016-05-11
  • 打赏
  • 举报
回复
引用 3 楼 renwotao2009 的回复:
一楼的二进制方式应该没有问题
可以了。。C语言这种方式可以传送任何文件吗?比如word,图片视频文件等
renwotao2009 2016-05-11
  • 打赏
  • 举报
回复
一楼的二进制方式应该没有问题
renwotao2009 2016-05-11
  • 打赏
  • 举报
回复
ANSI应该也可以的,你在传输过程中发生了什么错误??不过使用的是iso8859-1扩展了原ANSI
LubinLew 2016-05-11
  • 打赏
  • 举报
回复
fopen("file", "rb"); fwrite("file", "wb");
LubinLew 2016-05-11
  • 打赏
  • 举报
回复
linux 下加不加b都行,这也得看发行版本,但是大部分linux都是这样的。 Windows下(VS)下必须加b,不加b只能操作ASCII。 无论什么(实体)文件都是由二进制数据构成,读写二进制可以传输各种类型的文件。 不需要判断什么文件类型的逻辑
Henryinferno 2016-05-11
  • 打赏
  • 举报
回复
引用 1 楼 lgbxyz 的回复:
fopen("file", "rb"); fwrite("file", "wb");
谢谢。还有个问题:要传输像word这种文件的话直接打开文件读,然后创建个word文件再写就行了嘛,不用在程序逻辑中处理读的是.doc .jpg. txt还是其他类型的文件?

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧