• htons htonl ntohl ntohs 的区别和作用


    htonshtonl、ntohl、ntohs是用来在网络字节顺序和本机字节顺序之间相互转换的函数。

    可以这么理解:

    n   :network;h   :host;s:short;l:long

    htons   :host    to    network     short型,依次类推。

    具体用法为:

    htons

    htons( u_short hostshort);

    hostshort:主机字节顺序表达的16位数。

    注释:

    本函数将一个16位数从主机字节顺序转换成网络字节顺序。

    返回值:

    htons()返回一个网络字节顺序的值。

    其余的同理。

    struct sockaddr_in servaddr;

    bzero(&servaddr,sizeof(servaddr));

    servaddr.sin_family = AF_INET;

    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

    servaddr.sin_port = htons(SERV_PORT);

    INADDR_ANY就是指定地址为0.0.0.0的地址,这个地址事实上表示不确定地址,或“所有地址”、“任意地址”。 一般来说,在各个系统中均定义成为0值。
    例如MontiVista Linux中在/usr/include/netinet/in.h定义为:
    /* Address to accept any incoming messages.   */
    #define INADDR_ANY              ((in_addr_t) 0x00000000)

    一般情况下,如果你要建立网络服务器应用程序,则你要通知服务器操作系统:请在某地址 xxx.xxx.xxx.xxx上的某端口 yyyy上进行侦听,并且把侦听到的数据包发送给我。这个过程,你是通过bind()系统调用完成的。——也就是说,你的程序要绑定服务器的某地址,或者说:把服务器的某地址上的某端口占为已用。服务器操作系统可以给你这个指定的地址,也可以不给你。
    如果你的服务器有多个网卡(每个网卡上有不同的IP地址),而你的服务(不管是在udp端口上侦听,还是在tcp端口上侦听),出于某种原因:可能是你的服务器操作系统可能随时增减IP地址,也有可能是为了省去确定服务器上有什么网络端口(网卡)的麻烦 —— 可以要在调用bind()的时候,告诉操作系统:“我需要在 yyyy 端口上侦听,所以发送到服务器的这个端口,不管是哪个网卡/哪个IP地址接收到的数据,都是我处理的。”这时候,服务器程序则在0.0.0.0这个地址上进行侦听。例如:
    Proto Recv-Q Send-Q   Local Address       Foreign Address        (state)

    SERV_PORT

    :::::::::::::::
    :: SERV_PORT ::
    :::::::::::::::
    (only sysop, init.bcm, only Linux/Win32)
    Syntax: SER(V_PORT) [<n>]
    (default: 8123)
    
    Defines the port number of the service interface. "0" disables the port.
    Example: SERV_PORT 0
    
    See also HELP PORTNUMBER and HELP SERV

    AF_前缀代表地址族 PF_前缀代表协议族

  • 相关阅读:
    用DecimalFormat格式化十进制数字的实际应用
    ETL测试小结
    浅谈DB2的四个隔离级别
    POI处理Excel中各种日期格式问题
    如何将Object类型转换成String类型
    ArrayList和LinkedList
    DB2 编目并访问远程数据库
    EXCEL解析之终极方法WorkbookFactory
    DB2中coalesce函数的应用
    【Linux学习】Linux用户管理2—用户配置文件
  • 原文地址:https://www.cnblogs.com/balaamwe/p/2228734.html
Copyright © 2020-2023  润新知