Linux下的C Socket编程 -- 获取对方IP地址
2017-01-06 11:24
441 查看
Linux下的C Socket编程(二)
获取域名对应的IP地址
经过上面的讨论,如果我们想要连接到远程的服务器,我们需要知道对方的IP地址,系统函数
gethostbyname便能够实现这个目的。它能够获取域名对应的IP地址并且返回一个
hostent类型的结果。其中包含了IP地址信息,他的头文件为
netdb.h。
struct hostent { char *h_name; // 主机名 char **h_aliases; // 别名列表 int h_addrtype; // 地址类型 int h_length; // 地址的长度 char **h_addr_list; // 地址列表 }
其中的
h_addr_list便是存放IP地址的信息。
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<sys/socket.h> #include<arpa/inet.h> #include<sys/types.h> #include<netdb.h> int main() { char *hostName = "www.baidu.com"; char ip[100]; struct hostent *host; struct in_addr **addr_list; int i; if (NULL == (host = gethostbyname(hostName))) { perror("get host by name error"); exit(1); } addr_list = (struct in_addr **)host->h_addr_list; for (i = 0; addr_list[i] != NULL; i++) { // inet_ntoa()将long类型的IP地址转化为圆点的字符串形式,作用与inet_addr()相反 strcpy(ip, inet_ntoa(*addr_list[i])); } printf("%s resolved to: %s", hostName, ip); return 0; }
gethostbyname()用来获取域名对应的IP地址。可以参加gethostbyname()来查看更过的用法。
从socket连接中获取对方IP
由前面能够知道
accept()返回的是结构体
sockaddr_in,由此很容易得知对方的IP和端口信息。
char *client_ip = inet_ntoa(client.sin_addr); int client_port = ntohs(client.sin_port);
到现在为止,我们已经接触了多个重要的类型。
sockaddr_in连接信息。用在connectsendrecv等中。 in_addrlong类型的IP地址。 sockaddr与sockaddr_in类似,是通用的socket连接信息。 hostent域名对应的IP信息。用在gethostbyname。
相关文章推荐
- 【Linux网络编程实例】实例一:获取主机MAC地址和IP地址
- Linux下编程获取本地IP地址的常见方法
- linux编程--c代码获取本机IP地址
- Linux下编程获取本地IP地址的常见方法
- Linux下C编程实现---获取本机IP地址
- linux编程获取本机IP地址
- linux编程获取ip地址
- Linux 树莓派 网络编程中服务端通过套接字获取客户端ip地址
- Linux下编程获取本地IP地址的常见方法
- linux c 网络编程:用域名获取IP地址或者用IP获取域名 网络地址转换成整型 主机字符顺序与网络字节顺序的转换
- Linux网络编程 (获取ip地址 gethostbyname)
- linux编程获取本机IP地址
- linux编程获取本机IP地址
- (转载)Linux上编程获取本机IP地址(而不是127.0.0.1)
- Java获取主机IP地址,自动区分Windows和Linux
- 解析域名与IP地址(Linux编程)
- linux 环境编程资料获取站点
- JAVA编程获取IP地址
- java判断是window系统还是Linux系统,并获取其IP地址及文件上传
- linux获取IP地址