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;
}

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-06 03:41:02

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

Linux网络编程入门 (转载)

http://www.cnblogs.com/RascallySnake/archive/2012/01/04/2312564.html (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端        在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序. 比如我们使用ftp程序从另外一        个地方获取文件

Linux网络编程(二)

服务套和客户机的信息函数 1.字节转换函数 在网络上面有着许多类型的机器,这些机器在表示数据的字节顺序是不同的, 比如i386芯片是低字节在内存地址的低端,高字节在高端,而alpha芯片却相反. 为了统一起来,在Linux下面,有专门的字节转换函数. unsigned long int htonl(unsigned long int hostlong)     unsigned short int htons(unisgned short int hostshort)     unsigned

Linux网络编程入门

(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍 客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端 在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序. 比如我们使用ftp程序从另外一 个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序. 服务端 和客户端相对应的程序即为服务端程序.被动的等待外面的程序来和自己通

[转] - Linux网络编程 -- 网络知识介绍

(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端        在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序. 比如我们使用ftp程序从另外一        个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序. 服务端        和客户端相

《Linux高性能服务器编程》学习总结(五)——Linux网络编程基础API

第五章      Linux网络编程基础API 对于网络编程,首先要了解的就是字节序的问题,字节序分为主机字节序和网络字节序,主机字节序又称小端字节序,是低字节存放在地地址,而网络字节序又称大端字节序,是低字节放在高地址.当数据在不同的机器上传播时,就需要统一字节顺序以保证不出现错误.在发送数据前,先将需要转变的数据转成网络字节序再发送,接收时先转成主机字节序再处理,要特别注意的是,即使是本机的两个进程通信,也要考虑字节序的问题,比如JAVA的虚拟机就使用大端字节序.使用如下代码可以查看本机的字

很全的linux网络编程技巧

注:作者王晓,本人认为总结得很好,故记之,绝无侵权之意. 1. LINUX网络编程基础知识 1 1.1. TCP/IP协议概述 1 1.2. OSI参考模型及TCP/IP参考模型 1 1.3. TCP协议 3 1.4. UDP协议 5 1.5. 协议的选择 6 2. 网络相关概念 6 2.1. socket概念 7 2.2. socket类型 8 2.3. socket信息数据结构 8 2.4. 数据存储优先顺序的转换 8 2.5. 地址格式转化 9 2.6. 名字地址转化 10 3. sock

Linux网络编程

第二章 Linux网络编程 2.1客户——服务器模型 目前大多数网络应用程序在编写时都采用客户—服务器模型,假设一端是客户,另一端是服务器,让服务器提供给客户一定的服务内容.它要求有一方(服务器方)在启动执行程序后(无限期地)等待其他客户端程序与之通信.这里可以再分为两种具体类型:并发型交互与重复型交互. (1)并发型交互.在并发型交互模式下,程序的主要运作步骤如下: ·等待一个客户请求的到来: ·生成一个新的进程或者任务来处理这个客户请求,同时这里还可以接收其他客户的请求,处理结束后,终止这个

Linux网络编程--多播

一.多播介绍 什么是多播? 单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信.单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信.实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途.多播,也称为"组播",将局域网中同一业务类型主机进行了逻辑上的分组,进行数据收发的时候其数据仅仅在同一分组中进行,其他的主机没有加入此分组不能收发对应的数据. 多播的地址是特定的,D类地址用于多播.D类

Linux网络编程:客户端/服务器的简单实现

一. Socket的基本知识 1. socket功能 Socket层次 Socket实质上提供了进程通信的端点,进程通信之前,双方必须首先各自创建一个端点,否则是没有办法建立联系并相互通信的. 每一个Socket都一个半相关描述: {协议, 本地地址, 本地端口} 完整的Socket的描述: {协议, 本地地址, 本地端口, 远程地址, 远程端口} 2. Socket工作流程 面向连接(TCP)的Socket工作流程 UDP的socket工作流程 l 服务器端 首先,服务器应用程序用系统调用so