永发信息网

C++ sendto 发送带有 0x00的数据,会结束数据

答案:4  悬赏:70  手机版
解决时间 2021-03-11 14:41
  • 提问者网友:十年饮冰
  • 2021-03-10 18:06
unsigned char p[5]={0x81,0x00,0xf1,0x81,0x03};
char *Message;
strcpy(Message,(const char*)p);
strcpy(realmessage, Message);
发送端
int isend = sendto(PrimaryUDP, (const char *)&MessageHead, sizeof(MessageHead), 0, (const sockaddr*)&remote, sizeof(remote));//首先发送长度
isend = sendto(PrimaryUDP, (const char *)&realmessage, MessageHead.iStringLen, 0, (const sockaddr*)&remote, sizeof(remote));//再发送消息内容
接收端
int iread1 = recvfrom(PrimaryUDP, comemessage, 256, 0, (sockaddr *)&remote, &sinlen);//接收发送的消息

问题是接收端 0x00之后的数据 没有收到,只能收到0x00之前的数据,怎么搞,求大神,有代码最好
最佳答案
  • 五星知识达人网友:逃夭
  • 2021-03-10 19:07
/0表示结束已经结束了 有2种解决办法,
第一种, 发送前先发送 通信内容的长度,接收方按长度接收 这样就不会收不到,但是如果意外通信中断可能造成卡死
第二种 提前将0x00替换为特定的值,接收后再替换回来, 这个办法要考虑替换值本身,比如用0xff代替0x00那么0xff自身也需要处理
全部回答
  • 1楼网友:不如潦草
  • 2021-03-10 22:50
/0表示结束符,表示流的结束,所以接收端以为已经结束了 有2种解决办法, 第一种, 发送前先发送 通信内容的长度,接收方按长度接收 这样就不会收不到,但是如果意外通信中断可能造成卡死 第二种 提前将0x00替换为特定的值,接收后再替换回来, 这个办法要考虑替换值本身,比如用0xff代替0x00那么0xff自身也需要处理
  • 2楼网友:猎心人
  • 2021-03-10 21:35
不要一次发送,分成多次发送 int sendbuf(int socket, char *buffer , int sendlen ) { int len=0; int one=1024 ; do { if ( sendlen-len > 1024 ) one=1024; else one=sendlen-len ; send(socket, buffer, one , 0); len += one ; buffer += one ; }while ( len < sendlen ) ; return len ; }
  • 3楼网友:渊鱼
  • 2021-03-10 20:23
unsigned char p[5]={0x81,0x00,0xf1,0x81,0x03}; char *Message; strcpy(Message,(const char*)p); strcpy(realmessage, Message); 发送端 int isend = sendto(PrimaryUDP, (const char *)&MessageHead, sizeof(MessageHead), 0, (const sockaddr*)&remote, sizeof(remote));//首先发送长度 isend = sendto(PrimaryUDP, (const char *)&realmessage, MessageHead.iStringLen, 0, (const sockaddr*)&remote, sizeof(remote));//再发送消息内容 接收端 int iread1 = recvfrom(PrimaryUDP, comemessage, 256, 0, (sockaddr *)&remote, &sinlen);//接收发送的消息 问题是接收端 0x00之后的数据 没有收到,只能收到0x00之前的数据,怎么搞,求大神,有代码最好
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯