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

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


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

#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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值