一起talk C栗子吧(第一百五十五回:C语言实例--获取socket通信地址)

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起talk C栗子吧(第一百五十五回:C语言实例--获取socket通信地址)相关的知识,希望对你有一定的参考价值。


各位看官们,大家好,上一回中咱们说的是socket通信地址系统调用的例子,这一回咱们说的例子是:获取socket通信地址 。闲话休提,言归正转。让我们一起talk C栗子吧!


看官们,我们前面的章回中介绍了与套接字通信地址相关的系统调用。还是哪句话,光说不练,不是我们的风格,今天我就通过具体的代码来演示如何使用这些系统调用来获取套接字的通信地址。

下面是使用该函数的详细步骤及其代码。我通过代码+注释的方式展示给大家,以方便大家更加好地理解该函数的用法。

char * host = "localhost";  //1.定义一个变量用来存放主机名称
char * server = "http";     //2.定义一个变量用来存放服务名称

struct addrinfo hints;      //3.定义模板,并且对模板进行初始化操作
memset(&hints,0,sizeof(struct addrinfo));
hints.ai_flags = AI_ADDRCONFIG | AI_CANONNAME;
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;

getaddrinfo(host,server,&hints,&res); //4.获取套接字通信地址的相关信息

        print_family(p_addr_info);       //5.显示套接字通信地址的相关信息
        print_type(p_addr_info);         //这几个函数都是自己定义的
        print_protocol(p_addr_info);
        print_host_name(p_addr_info);
        print_IPaddress(p_addr_info);
        print_port(p_addr_info);

freeaddrinfo(res);                      //6.释放套接字地址链接

看官们,以上是核心代码,完整的代码放到了我的资源中,大家可以点击这里下载使用。

在代码中,我们使用了一个新的函数:inet_ntop(),该函数主要用来把二进制格式的IP地址转换为我们常见的点分十进制格式(形式为:127.0.0.0),这样方便于我们阅读IP地址。类似的转换还有端口号,我们使用ntohs()函数把端口号从网络序转换成了本地字节序。

在代码中我们使用了本地主机,它的主机名为:localhost。该主机的IP地址:127.0.0.1。大家也可以使用其它的主机地址,比如,我们在代码中使用了sina的主机名:"www.sina.com"来做例子,进而得到了它的IP地址,以及其它套接字信息。

下面是程序的运行结果,请大家参考:

print information of socket 
[family]     AF_INET 
[type]       SOCK_STREAM 
[protocol]   IPPROTO_TCP 
[host name]  localhost 
[IP Address] 127.0.0.1 
[port]       80 
print information of socket 
[family]     AF_INET 
[type]       SOCK_STREAM 
[protocol]   IPPROTO_TCP 
[host name]  tucana.sina.com.cn 
[IP Address] 111.161.78.250 
[port]       80 

从上面的运行结果中大家可以看到,它们输出的端口号是相同的,这主要是因为我们在模板中设置了套接字的服务是http,该服务就是我们上网时常用的web服务,它的默认端口号就是80。大家可以自己动手更换一下模板,这样就可以输出其它的结果。

各位看官,关于获取socket通信地址的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。


以上是关于一起talk C栗子吧(第一百五十五回:C语言实例--获取socket通信地址)的主要内容,如果未能解决你的问题,请参考以下文章

一起talk C栗子吧(第一百五十一回:C语言实例--socket通信地址)

一起talk C栗子吧(第一百五十四回:C语言实例--socket通信地址系统调用二)

一起talk C栗子吧(第一百五十二回:C语言实例--计算机中的大小端)

一起talk C栗子吧(第一百五十三回:C语言实例--socket通信地址系统调用一)

一起talk C栗子吧(第一百五十六回:C语言实例--基于AF_UNIX域的流套接字通信)

一起talk C栗子吧(第一百五十八回:C语言实例--基于AF_INET域的流套接字通信)