Linux网络编程--协议的名称以及类型等处理

来源:互联网 发布:淘宝哪个店能寄到韩国 编辑:程序博客网 时间:2024/06/10 19:35

为了网络编程的便捷,系统提供了一组用于查询协议的值以及名称的函数,本篇文章主要介绍协议族函数的使用方法和注意事项。
这里写图片描述
这里写图片描述


下面用一段代码介绍函数的使用方法:

#include <netdb.h>#include <stdio.h> /* 显示协议的项目 */void display_protocol(struct protoent *pt){    int i = 0;    if(pt){/*合法的指针*/        printf("protocol name:%s,",pt->p_name);/*协议的官方名称*/        if(pt->p_aliases){/*别名不为空*/            printf("alias name:");/*显示别名*/            while(pt->p_aliases[i]){/*列表没到结尾*/                printf("%s ",pt->p_aliases[i]); /*显示当前别名*/                i++;/*下一个别名*/            }        }        printf(",value:%d\n",pt->p_proto);  /*协议值*/    }}int main(int argc, char *argv[]){    int i = 0;    /* 要查询的协议名称 */    const char  *const protocol_name[]={    "ip",    "icmp",    "igmp",     "ggp",    "ipencap",    "st",    "tcp",    "egp",    "igp",    "pup",    "udp",    "hmp",    "xns-idp",    "rdp",    "iso-tp4",    "xtp",    "ddp",    "idpr-cmtp",    "ipv6",    "ipv6-route",    "ipv6-frag",    "idrp",    "rsvp",    "gre",    "esp",    "ah",    "skip",    "ipv6-icmp",    "ipv6-nonxt",    "ipv6-opts",    "rspf",    "vmtp",    "eigrp",    "ospf",    "ax.25",    "ipip",    "etherip",    "encap",    "pim",    "ipcomp",    "vrrp",    "l2tp",    "isis",    "sctp",    "fc",    NULL};     setprotoent(1);/*在使用函数getprotobyname时不关闭文件/etc/protocols*/    while(protocol_name[i]!=NULL){/*没有到数组protocol_name的结尾*/        struct protoent *pt = getprotobyname((const char*)&protocol_name[i][0]);/*查询协议*/        if(pt){/*成功*/            display_protocol(pt);   /*显示协议项目*/        }        i++;/*移到数组protocol_name的下一个*/    };    endprotoent();/*关闭文件/etc/protocols*/    return 0;   }

大家可以运行程序,对比下图系统给出的协议名称和数值进行对比。
这里写图片描述

1 0
原创粉丝点击