各位看官们,大家好,上一回中咱们说的是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通信地址的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
时间: 2024-10-12 10:00:29