请问linux如果通过TCP传输多张图片

ZJE_ANDY 2017-04-10 03:41:37
我传输一张图片是可以的,但如果连续传两张,那么第二张就会打不开,而且第二张为0KB
这是客户端发送的代码:
fseek(fp,0,SEEK_END);
file_len = ftell(fp);
fseek(fp,0,SEEK_SET);

tcp_num = file_len/BUFFMAX;
printf("tcpnum=%d\n",tcp_num);
if((tcp_num*BUFFMAX)<file_len)
{
tcp_num+=1;
}

int i,write_len;
for(i=0;i<tcp_num;i++)
{
if(file_len - i*BUFFMAX >= BUFFMAX)
{
file_send_len = BUFFMAX;
}
else
{
file_send_len = file_len - i*BUFFMAX;
}
bzero(buff,BUFFMAX);
write_len = fread(buff,sizeof(unsigned char),file_send_len,fp);
len = send(sockfd,buff,file_send_len,0);
if(len<0)
{
perror("failed to send");
break;
}
}
fclose(fp);

bzero(buff,BUFFMAX);
printf("==================传输第二张================\n");
if(!(fp=fopen("2.jpg","rb+")))
{
return -1;
}

fseek(fp,0,SEEK_END);
file_len = ftell(fp);
fseek(fp,0,SEEK_SET);

tcp_num = file_len/BUFFMAX;
printf("tcpnum=%d\n",tcp_num);
if((tcp_num*BUFFMAX)<file_len)
{
tcp_num+=1;
}

for(i=0;i<tcp_num;i++)
{
if(file_len - i*BUFFMAX >= BUFFMAX)
{
file_send_len = BUFFMAX;
}
else
{
file_send_len = file_len - i*BUFFMAX;
}
bzero(buff,BUFFMAX);
write_len = fread(buff,sizeof(unsigned char),file_send_len,fp);
len = send(sockfd,buff,file_send_len,0);
if(len<0)
{
perror("failed to send");
break;
}
}
fclose(fp);


这是服务端:
FILE *fp;
if((fp = fopen("1.jpg","wb"))==NULL)
{
printf("file open err\n");
return -1;

}



while((data_len = recv(new_sockfd,buff,BUFFMAX,0))>0)
{
int write_len = fwrite(buff,sizeof(char),data_len,fp);
printf("write_len = %d\n",write_len);
}
fclose(fp);


if((fp = fopen("2.jpg","wb"))==NULL)
{
printf("file open err\n");
return -1;

}

while((data_len = recv(new_sockfd,buff,BUFFMAX,0))>0)
{
int write_len = fwrite(buff,sizeof(char),data_len,fp);
printf("write_len = %d\n",write_len);
}
fclose(fp);


return 0;

其中tcp的连接已经写了,没贴出来而已。
问题是为什么传第一张图片可以,传第二张就不行了
...全文
436 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

datalen = 0;
while(datalen <  filesize)
    {
        int recv_len=  recv(new_sockfd,buff,BUFFMAX,0);
        datalen += recv_len;
        fwrite(buff,sizeof(char),recv_len,fp);
    }
//写成类似这种,我随便写得代码,可能有BUG
风在天边 2017-05-17
  • 打赏
  • 举报
回复
我猜测如果你先传2,后传1;会收不到1的;程序逻辑有问题。
小竹z 2017-05-17
  • 打赏
  • 举报
回复
楼主先了解下tcp粘包问题吧,再看看recv阻塞模式是什么意思
ZJE_ANDY 2017-04-10
  • 打赏
  • 举报
回复
刚刚试了下,问题是因为第二次传图片时recv的返回值=0了,为什么会这样啊?

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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