wgj_126 发表于 2008-04-06 12:54

关于在C语言中用socket传输图片的问题

用C语言,socket编程中发送与接受函数为send和recv,但是他们传送的是字符串,怎么实现传送图片,我的想法是用fopen打开图片文件,用fread将图片文件读到字符数组中,然后发送,在接收端用fwrite写到文件里,但是没有成功,不知什么问题,请高手指点。
我的发送端代码片段:int bytesSent;
char sendbuf;
int num=1,l;
FILE *fp;
if((fp=fopen("1.JPG","rb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
while(1)
{
num=fread(sendbuf,31, 1,fp);
if(num<1)
{
if(ferror(fp)!=0)
{
printf("fread error!\n");
exit(0);
}
else
{
l=sizeof(sendbuf);
sendbuf='\0';
bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 );
printf( "Letter send: %d\n", bytesSent );
break;
}
}
l=sizeof(sendbuf);
sendbuf='\0';
bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 );
//printf( "Letter send: %s\n", bytesSent );
}
fclose(fp);
return;
以上是我编的客户端,文件是用二进制形式打开的:fp=fopen("1.JPG","rb"),但是怎么用send函数发送呢?我调试时看到打开图片后用fread到sendbuf数组里的有‘-1’和‘0’字符,如果发送,那不就发送第一个‘0’前面的字符吗?

当sendbuf的类型为字符数组时,用fread函数读“1.JPG"文件时,读到sendbuf中的有好多ASCII码为-1和0的字符,这样send函数就只发送第一个ASCII码为0的所有字符了.

请问有谁编过这种程序并成功实现过?
具体应该怎么实现啊?谢谢各位指点。

wangqi0021 发表于 2008-04-06 16:18

我觉得应该是read和write。

floer 发表于 2008-04-06 16:34


如果一个char*中包含有‘0’(并不是char*)的结束标志,该怎么处理啊,用send会不会出问题?

gaocheng 发表于 2008-04-06 16:41

send不会,strlen会

wgj_126 发表于 2008-04-06 22:54

wgj_126 的帖子

有哪位高手做过啊?或者帮我调试一下。谢谢

204tian 发表于 2008-04-07 10:46

不要用strlen。。。

net_robber 发表于 2008-04-07 15:38

原帖由 204tian 于 2008-4-7 10:46 发表 http://bbs.chinaunix.net/images/common/back.gif
不要用strlen。。。
图片中可能出现‘\0’字符,因此strlen是无能为力的


传图片和传其他数据没有区别的

都是传buf

scncliuzhenlei 发表于 2008-04-07 21:14

对了,我觉的不应该用strlen

yecheng_110 发表于 2008-04-07 21:22

思路是对的:mrgreen:
图片也就是一个文件而已

nicolas.shen 发表于 2008-04-07 21:53

本来就不是字符串为什么要用strlen呢,用sizeof(buf)吧
页: [1] 2
查看完整版本: 关于在C语言中用socket传输图片的问题