WinSock网络编程学习笔记(七):协议查询程序(getprotobyname和getprotobynumber函数)
来源:互联网 发布:哪种编程语言最容易学 编辑:程序博客网 时间:2024/05/15 23:45
今天从书中学习了getprotobyname和getprotobyport函数。
Internet中存在着很多的协议,每一个都有着自己的名字,如IP、TCP、UDP等等。
但是当这些协议数据在网络上传输时,不是通过名字标识协议的,而是为每一种协议分配了一个编号,由IANA管理,
每一个下层协议的首部都有一个字段用来指明它的数据是属于哪个上层协议的。名字是给人看的,编号是给机器看的。
通过函数 getprotobyname、getprotobyport可以得到协议相关的信息。
函数原型:
struct protoent FAR *WSAAPI getprotobyname(const char FAR*name)
struct protoent FAR *WSAAPI getprotobynumber(int number)
成功返回指向protoent结构的指针,失败返回NULL。
下面贴出测试代码:
#include<stdlib.h>#include<stdio.h>#include<winsock2.h>#pragma comment(lib,"ws2_32")/*struct protoent{char FAR *p_name;//正式协议名char FAR *FAR *p_aliases;//别名列表short p_proto;//协议号}*///该函数输出返回的协议信息,成功时依次输出协议名称、别名、协议编号,//出错时则打印出错误信息void proto_print(struct protoent *proto_info,const char * *proto_name,int proto){char **list_p;if(proto_info == NULL){printf("______________________________\n");if(proto_name)printf("can't get protocol information:%s\n",proto_name);else printf("can't get protocol information by number:%d\n",proto);}else {printf("________________________________\n");printf("offical name: %s\n",proto_info->p_name);for(list_p = proto_info->p_aliases;*list_p != NULL; list_p++){printf("alias:%s\n",*list_p);}printf("protocol : %d\n",proto_info->p_proto);}}int main(){const char *proto_name[] = {"tcp","ipv6","esp"};int i,name_cnt = sizeof(proto_name) / sizeof(proto_name[0]);int proto_number[] = {1,8,51};int proto_cnt = sizeof(proto_number) / sizeof(proto_number[0]);struct protoent *proto_info;WSADATA wsaData;WSAStartup( (MAKEWORD(2,0)), &wsaData);printf("[getprotobyname] get protocol by name\n");for(i = 0;i < name_cnt; i++){proto_info = getprotobyname(proto_name[i]);proto_print(proto_info,proto_name[i],0);}printf("\n[getprotobynumber] get protocol by number\n");for(i = 0 ; i<proto_cnt ; i++){proto_info = getprotobynumber(proto_number[i]);proto_print(proto_info,NULL,proto_number[i]);}WSACleanup();return 0;}结果:
0 0
- WinSock网络编程学习笔记(七):协议查询程序(getprotobyname和getprotobynumber函数)
- WinSock网络编程学习笔记(六):服务查询程序(getserverbyname和getserverbyport函数)
- WinSock网络编程学习笔记(五):查询主机信息
- WinSock网络编程学习笔记(八):测试bind程序
- getprotobyname, getprotobynumber, endprotoent函数的应用
- 获取协议名、协议号——getprotoent(),getprotobyname(),getprotobynumber()
- 获取协议名、协议号——getprotoent(),getprotobyname(),getprotobynumber()
- WinSock网络编程学习笔记(九):基于UDP实现DayTime协议
- WinSock网络编程学习笔记
- WinSock网络编程学习(二)计算校验和程序
- WinSock网络编程学习笔记(四)网络转换函数的实现
- 网络编程学习笔记(二)UDP协议及聊天小程序的实现
- Winsock编程笔记(1)
- WinSock网络编程学习(一)Echo客户/服务器程序
- WinSock网络编程学习(三)判断主机字节序程序
- java笔记(七):网络编程
- java网络编程学习笔记之一(TCP/IP协议与UDP协议的区别和认识)
- getprotobyname函数
- 高效率的取幂运算
- 缺少 mysqli 扩展和Fatal Error: Class 'mysqli' not found in... 解决方法
- Linux如何查看进程、杀死进程、启动进程等常用命令
- 三个字的字,值得收藏
- 【暮色天】生死时速 激情相伴(2.27)
- WinSock网络编程学习笔记(七):协议查询程序(getprotobyname和getprotobynumber函数)
- 初学Web service遇到的问题
- 艺龙的执着与固执:等待微信
- sql 不相等 判断 操作符
- VS2012有效产品密钥
- android 实现图片加水印
- 霸道而又暧昧,不黄不暴力的男女关系语录
- Linux下查看磁盘空间大小
- 玩JBPM6调试报错