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,为什么?能否给出正解?
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,为什么?能否给出正解?
...全文
相关推荐
新手socket编程入门详解指南
本文,将一步一步引导初学者来学习socket,所有编程思路都结合在socket API里面,以及提供socket的疑问和基础知识点,同时在最后给出多个例程,下面可以和小编一起学习
C语言中文网socket教程
离线网页资料,打开html文件即可查看VIP内容
Socket通信,通过异步,解决粘包问题
Socket通信,通过异步,解决粘包问题
C++实现简单Socket通信
C++实现简单Socket通信,最基本的代码。可以作为初始学习socket功能使用,仅供参考...................
c++ socket通信库
socket通信库,c++编写,只需调用几个函数即可完成socket通信过程。简单易用,C#等其他语言可调用.问题沟通可发送邮件至gaocongly@126.com


