关于在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的所有字符了.
请问有谁编过这种程序并成功实现过?
具体应该怎么实现啊?谢谢各位指点。 我觉得应该是read和write。 顶
如果一个char*中包含有‘0’(并不是char*)的结束标志,该怎么处理啊,用send会不会出问题? send不会,strlen会
wgj_126 的帖子
有哪位高手做过啊?或者帮我调试一下。谢谢 不要用strlen。。。 原帖由 204tian 于 2008-4-7 10:46 发表 http://bbs.chinaunix.net/images/common/back.gif不要用strlen。。。
图片中可能出现‘\0’字符,因此strlen是无能为力的
传图片和传其他数据没有区别的
都是传buf 对了,我觉的不应该用strlen 思路是对的:mrgreen:
图片也就是一个文件而已 本来就不是字符串为什么要用strlen呢,用sizeof(buf)吧
页:
[1]
2