socket 的通信问题(大小端)

juckciy juckciy 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
/*******************/
server接收:
int recv_with_headerTmp(int fd, char **buf)
{
unsigned long flag;
int len = 0;
int lRet = 0;
int data = 0;
char Tmpbuf[32]={0};
char Tmpbuf1[32]={0};
#if 1
lRet=recv(fd,Tmpbuf,32,0);
if(lRet<=0)
{
printf("recv flag error\n");
return -1;
}

#if 1
flag =atoi(Tmpbuf);
printf("flag=%d\n",flag);
if(flag!=0x51589158)
{
printf("recv bad flag: 0x%8x\n",flag);
return -1;
}
#endif
#endif

lRet=recv(fd,Tmpbuf1,32,0);
if(lRet<=0)
{
perror("lRet,sfadddddd\n");
printf("lRet =%d\n",lRet);
__ERR("recv len error\n");
return -1;
}
len=atoi(Tmpbuf1);
printf("len=%d\n",len);
if(len<=0)
{
__ERR("recv bad len: %d\n",len);
return -1;
}

if(len>=(15*1024*1024))
{
__ERR("recv bad len: %d\n",len);
return -1;
}


*buf =(char *)malloc(len+2);
if(*buf==NULL)
{
//__ERR("new buf failed.\n");
return -1;
}

int offset=0;

while(len)
{
lRet=recv(fd, *buf + offset,len,0);
if(lRet<=0)
{
printf("recv data error\n");
return -1;
}
else
{
offset+=lRet;
len-=lRet;
}
}

printf("recv success buf =%s\n",*buf);
return offset;
}

client发送:int send_with_headerTmp(int fd, char *data, int len)
{
char buf[32] ={0};
char pbuf[32]={0};
unsigned long flag=0x51589158;
sprintf(buf,"%d",flag);
int ret=send(fd,buf,strlen(buf)+1,0);
if(ret<0)
{
__ERR("send flag error\n");
return -1;
}

sprintf(pbuf,"%d",len);
printf("len=%d\n",len);
ret=send(fd,pbuf,strlen(pbuf)+1,0);
if(ret<0)
{
__ERR("send len error\n");
return -1;
}

ret=send(fd,data,len,0);
return ret;
}

同是大端或者同是小端没有问题。 一台大端一台小段通信服务器就会出现recv len error,为什么?能否给出正解?
...全文
评论 13
收藏 已收藏
分享
返回顶部
juckciy
C语言 70,039 成员 243,237 内容