首页
社区
课程
招聘
用sendto 和 recfrom的问题
发表于: 2005-7-19 13:03 7063

用sendto 和 recfrom的问题

2005-7-19 13:03
7063
在网络编程要用到
sendto 可是发送的数据时 00 04 01 00 00 01 00 00 01
由与中间由00 就被c语言认为时结束符号,结果 数据发送不完整,遇到这样的问题怎么弄?
在 接受数据的时候也由同样的问题,接受来的数据同样也有 0 在中间,把接收的数据防到字符串中总是显示一部分,
应该怎么办,才能接受全部数据?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好好看看sendto函数,专门有个保存要发送数的大小参数len

function sendto(s: TSocket; var Buf; len, flags: Integer; var addrto: TSockAddr;
  tolen: Integer): Integer; stdcall;
2005-7-19 14:28
0
雪    币: 156
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
那接收那?
2005-7-19 15:37
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
一样
2005-7-19 19:02
0
雪    币: 156
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
sockfd=socket(AF_INET,SOCK_DGRAM,0);
        sockaddr_in stsin;
                stsin.sin_family=AF_INET;
                stsin.sin_port=htons(53);
                stsin.sin_addr.s_addr=inet_addr("202.99.96.68");
            a=sendto(sockfd,senddata,sizeof(senddata),0,(struct sockaddr *)&stsin,sizeof(stsin));
                  cc=100;
                b=recvfrom(sockfd,buff,sizeof(buff),0,(struct sockaddr *)&stsin,&cc);

总是收到部分 返回信息,问题在哪里?
2005-7-19 22:14
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
就是那个b=啊,虽然接受的数据包不一定就是发送方的数据包,但是一般情况下还是很有参考价值的
2005-7-20 16:09
0
雪    币: 135
活跃值: (226)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
7
RECV的LEN参数是告诉WINSOCK你的缓冲区多大,而返回的参数是WINSOCK告诉你收到多少数据,完全不同的东西
如果RECV填满缓冲区还有剩余的数据,那么WINSOCK就会再次发送FD_READ(消息模式下),这样方便在消息循环里不断的读取数据
所以当然是return<=len
不知道recvfrom和recv是不是一样
2005-7-20 22:31
0
游客
登录 | 注册 方可回帖
返回
//