首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

recv函数接收返回值的有关问题,感觉有点奇怪

2013-08-04 
recv函数接收返回值的问题,感觉有点奇怪不是说recv是接受的的确切数据大小吗? retrecv(sock, buf, strlen

recv函数接收返回值的问题,感觉有点奇怪
不是说recv是接受的的确切数据大小吗?

 ret=recv(sock, buf, strlen(head)-4, 0);
        printf("%s\n",buf);
        printf("recv buf:%d\n",strlen(buf));
        printf("recv ret:%d\n",ret);

为什么我用了这几行代码后结果输出的两个数字不一样?buf开始时清空了的。。。
既然recv接收到的数据都放在buf里,那两个数值应该相等啊。结果ret等于我放送的字节数,strlen(buf)小于ret,这是什么情况 socket recv?
[解决办法]
引用:
Quote: 引用:


可以理解的,
recv函数的里面长度,是希望接收到数据的长度大小,
而返回值是实际上接收到的数据大小,
在网路过程中,也是有可能接收到垃圾数据的!

就算接收到垃圾数据不是也应该放到buf里面去吗?那我的buf长度也应该等于实际接收到的数据大小啊


刚写一个demo测试了你说的情况,是不可能的!
服务端:

  len = send ( client_sock, "welcometotheserverAAA", 50, 0);                          
    
    printf(" had  send datelen = %d\n", len);                                           
    printf(" want send datelen = 50 \n");            


客户端
 char buf[50] = {0};
 55         int len;
 56         if( (len = recv( client_sock, buf, 10 , 0)) < 0 )
 57         {
 58             perror("recv");
 59             Ret = -3;
 60             goto ERROR;


 61         }
 62 
 63         printf(" had  recv datelen = %d\n", len);
 64         printf(" want recv datelen = 10\n");
 65         printf(" want recv date: %s\n", buf);



运行结果:

This is a server 
 had  send datelen = 50
 want send datelen = 50
This is a client
 had  recv datelen = 10
 want recv datelen = 10
 want recv date: welcometot
 


你的那种情况不对!因为服务端那实际发的数据大小你是不知道的!
所以,recv会给你大小,让内核来处理最大只能接收这么多的数据的!
比这个少,只能说服务端发的实际数据比要求的少了

热点排行