怎样在C语言中实现用socket传送图片 25

用C语言,socket编程中发送与接受函数为send和recv,但是他们传送的是字符串,怎么实现传送图片,我的想法是用fopen打开图片文件,用fread将图片文件读到字... 用C语言,socket编程中发送与接受函数为send和recv,但是他们传送的是字符串,怎么实现传送图片,我的想法是用fopen打开图片文件,用fread将图片文件读到字符数组中,然后发送,在接收端用fwrite写到文件里,但是没有成功,不知什么问题,请高手指点。
int bytesSent;
char sendbuf[32];
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[l]='\0';
bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 );
printf( "Letter send: %d\n", bytesSent );
break;
}
}
l=sizeof(sendbuf);
sendbuf[l]='\0';
bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 );
//printf( "Letter send: %s\n", bytesSent );
}
fclose(fp);
return;
以上是我编的客户端,文件是用二进制形式打开的:fp=fopen("1.JPG","rb"),但是怎么用send函数发送呢?我调试时看到sendbuf数组里有‘-1’和‘0’字符,如果发送,那不就发送第一个‘0’前面的字符吗?
具体应该怎么实现啊?谢谢各位指点。
展开
 我来答
s307497146
2008-04-03 · TA获得超过441个赞
知道小有建树答主
回答量:533
采纳率:0%
帮助的人:314万
展开全部
每个包有大小限制的,图片可能是太大发送失败。
建议你在每个数据包里加一个类似序号的结构。然后图片数据传过去了用序号重新组合,如果缺少哪个序号,还可以用序号重新请求。
包结构:序号(2字节)+包长度(4字节)+部分图片数据
图片分成N份
传输方;有个合成新包的函数。有个处理缺包请求的函数。
接受方:有个检验碎片是否完全传过来的函数。有个组合图片碎片的函数。还应该有发送缺包请求功能的函数。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
汉凝佛Is
2008-04-02 · 超过28用户采纳过TA的回答
知道答主
回答量:223
采纳率:0%
帮助的人:0
展开全部
传字符是文本流,传所有的包括文本.图片要建立一个 文件流, 读取数据,然后用网络流socket发送
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
信息技术知识
2015-11-02 · TA获得超过133个赞
知道答主
回答量:164
采纳率:0%
帮助的人:57.9万
展开全部
  1. 创建网络套接字

  2. 绑定端口

  3. 建立连接

  4. 发送图片(填上文件所在路径即可)

  5. 断开连接

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
捡到的幸福
2008-04-02 · TA获得超过1282个赞
知道小有建树答主
回答量:568
采纳率:0%
帮助的人:350万
展开全部
同样的,都是按二进制代码一个一个字节来传
因为socket发送和接受都有数据长度参数,发送是就按你输入的长度参数来发送数据,接受时就返回接受到的数据的长度。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式