socket 的通信问题(大小端)
/*******************/
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,为什么?能否给出正解?