设为首页收藏本站

无忧开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索

[网络编程] 揭开网络编程的神秘面纱(三)

[复制链接]
王先森 发表于 2015-4-22 10:58:15 | 显示全部楼层 |阅读模式
      大家好,欢迎大家再次走进凌阳教育公众平台并阅读网络编程教学部分,上周咱们讲解了UDP编程的client的数据发送部分,有发就有收,今天讲解的内容是接受UDP数据。
        接受UDP数据时也有相应的函数接口,recvfrom函数,
        ssize_t recvfrom(int sockfd, void *buf, size_t nbytes, int flags, struct sockaddr *from, socklen_t *addrlen);
        功能:接受UDP数据,并将源地址信息保存在from指向的结构中。
        参数:
        sockfd:接收数据使用的套接字。
        buf:接受数据缓冲区。
        nbytes:接收数据缓冲区的大小。
        flags:套接字标志(常为0)。
        from:源地址结构体指针,用于保存数据来源。
        addrlen:from所指向的内容的长度。
        返回值:接受的数据大小。        
         例子:
        char recv_buf[100]="";
        recvfrom(sockfd,recv_buf,sizeof(recv_buf),0,(struct sockaddr*)&cli_addr,&cli_len);
        以上内容即为UDPclient收发送数据的基本内容,但是关于细节的部分没有太多的解释,那么在讲UDPserver编程之前,本着对读者负责的原则我们需要给大家多说一些内容。
       首先是套接字地址结构的问题,我们上期在讲解sendto函数的时候,关于它的第5个参数并没有过多的介绍,只是简单的介绍它为目的结构体的指针,用来指向与client通信的服务器的信息,那么它是怎么指向这个信息的呢?接下来简单的介绍下它的具体内容。
         对于struct sockaddr *to,to是一个结构体指针,它的类型是
         struct sockaddr
        {
            sa_family_t sa_family;
            char            sa_data[14];
        }
        它在内存中所占的大小是16个字节,用来存储主机的信息,包括IP、port、协议族的信息。但是我们注意到它只有两个成员,程序员并不方便去给它传参数,所以我们还有另外一个方便传值的套接字地址结构——IPv4地址套接字结构体,它的类型是:
        struct  sockaddr_in
        {
            sa_family_t sin_family;
            in_port_t     sin_port;
            struct in_addr sin_addr;
            char             sin_zero[8];
        }
        对于这个结构体,我们能够清晰的看到它的结构体成员的名字,协议族、端口、IP地址等,我们可以直接给结构体成员赋值,然后将来强制类型转换成struct sockaddr *类型的就可以使用了,这是第一个问题。
        其次,对于网络上的数据我们需要考虑字节序的问题,这里简单的解释一下什么是字节序。字节序指的是多字节数据的存储顺序。比如一个short  a=0x1122,首先它是2个字节的数据,11为高位字节,22为低位字节,如果11存在了内存中的低地址,22存在了内存中的高地址,它是大端格式的数据;如果11存在了内存中的高地址,22存在了内存中的低地址,那它是一个小端数据。对于不同架构、不同型号、不同厂商生产的电脑,它对内存的管理不同,字节序也就可能不同。但是传送到网络上时,我们必须要保证所有的主机都能识别这个数据,所以我们规定数据往网络上传的时候,我们要转换成网络字节序——大端格式。至于怎么转换字节序,我们有相关的函数,htons和htonl,它们的作用就是将16位和32位的主机字节序转换成网络字节序。
        套接字地址结构体和字节序是我们在进行网络编程时每时每刻都会用到的知识点,有兴趣的同学可以做深入的研究,下期我们讲解UDPserver以及TCP编程内容。
        热爱linux的少年少女们,下次见。
虚竹 发表于 2015-4-22 11:09:32 | 显示全部楼层
众里寻他千百度,蓦然回首在这里!
 楼主| 王先森 发表于 2015-4-22 12:00:30 手机版 | 显示全部楼层
可以,不错,顶呱呱
来自: 微社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|无忧开发者社区 (京ICP备09010168号

GMT+8, 2017-9-21 23:55 , Processed in 0.234649 second(s), 36 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 51Develop.Net

快速回复 返回顶部 返回列表