常用的几个网络api
2017-11-30 18:24
218 查看
1.通过网址获取ip
头文件<netdb.h>struct hostent *gethostbyname(const char *name); 返回一个目的主机的结构体
struct hostent
{
char *h_name; //正式主机名
char **h_aliases; //主机别名
int h_addrtype; //主机IP地址类型:IPV4-AF_INET
int h_length; //主机IP地址字节长度,对于IPv4是四字节,即32位
char **h_addr_list; //主机的IP地址列表
};
#define h_addr h_addr_list[0] //保存的是IP地址
h_addr 保存了目的主机的ip不好意思他是一个网络序 并且是char*的数据 所以先要转成网络 序才能去转
![](https://img-blog.csdn.net/20171130174015953?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzcwNTg0NDI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
printf("IP Address : %s\n",inet_ntop(host->h_addrtype,host->h_addr,ip,sizeof(ip))); 这个api也可以
2.通过套接字获取到该套接字的端口和ip
获取本地协议的地址
getsockname(listenfd, (struct sockaddr *)&listendAddr, &listendAddrLen);
![](https://img-blog.csdn.net/20171130181925742?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzcwNTg0NDI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
实际如图所示
getpeername函数用于获取与某个套接字关联的外地协议地址
getpeername(connfd, (struct sockaddr *)&connectedAddr, &connectedAddrLen);//获取connfd表示的连接上的本地地址
头文件<netdb.h>struct hostent *gethostbyname(const char *name); 返回一个目的主机的结构体
struct hostent
{
char *h_name; //正式主机名
char **h_aliases; //主机别名
int h_addrtype; //主机IP地址类型:IPV4-AF_INET
int h_length; //主机IP地址字节长度,对于IPv4是四字节,即32位
char **h_addr_list; //主机的IP地址列表
};
#define h_addr h_addr_list[0] //保存的是IP地址
h_addr 保存了目的主机的ip不好意思他是一个网络序 并且是char*的数据 所以先要转成网络 序才能去转
#include <iostream> #include <cstdio> #include <string.h> #include <netdb.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/socket.h> using namespace std; int main() { struct hostent* host = NULL; sockaddr_in caddr; char www[20]=""; fgets(www,20,stdin);//多读个回车 www[strlen(www)-1]='\0'; cout<<www<<endl; host = gethostbyname(www); if(host==NULL) { return 0; } cout<<host->h_name<<endl; printf("IP Address : %s\n",inet_ntoa(*((struct in_addr *)host->h_addr))); // 网络字节转字符串 //cout<<ip<<endl; return 0; } ~程序如上 对于 in_addr 主机序 的结构体我理解位里面只有一个类似string的结构体所以 我们当时写的是这个东西所以直接转换就强转就行了;
printf("IP Address : %s\n",inet_ntop(host->h_addrtype,host->h_addr,ip,sizeof(ip))); 这个api也可以
2.通过套接字获取到该套接字的端口和ip
获取本地协议的地址
getsockname(listenfd, (struct sockaddr *)&listendAddr, &listendAddrLen);
using namespace std; 9 int main() 10 { 11 struct hostent* host = NULL; 12 struct sockaddr_in caddr,saddr; 13 int socketfd=socket(AF_INET,SOCK_STREAM,0); 14 memset(&caddr,0,sizeof(caddr)); 15 caddr.sin_family=AF_INET; 16 caddr.sin_port=htons(8888); 17 caddr.sin_addr.s_addr=inet_addr("10.104.238.147"); 18 int res=bind(socketfd,(sockaddr *)&caddr,sizeof(caddr)); 19 listen(socketfd,5); 20 socklen_t len=sizeof(saddr); 21 getsockname(socketfd,(sockaddr*)&saddr,&len); 22 cout<<"1 "<<inet_ntoa(saddr.sin_addr)<<" "; 23 cout<<"2 "<<ntohs(saddr.sin_port)<<endl;
实际如图所示
getpeername函数用于获取与某个套接字关联的外地协议地址
getpeername(connfd, (struct sockaddr *)&connectedAddr, &connectedAddrLen);//获取connfd表示的连接上的本地地址
相关文章推荐
- Windows最常用的几个网络CMD命令总结
- 几个常用的网络命令
- 涉及网络编程时,需要用到的几个常用方法
- 网络赛用MOD-含读入输出优化模板和几个常用函数
- 几个常用的异步框架和网络访问框架区分对比
- 常用网络术语 && HTTP协议的几个重要概念 && HTTPS传输协议
- 网络编程中的几个常用函数
- linux网络编程中,几个常用API的阻塞与非阻塞调用
- 几个常用的网络命令
- 网络编程--常用API
- 安卓判断网络状态的几个常用函数
- 必须学会的几个常用网络测试命令
- RedHat的几个常用配置-网络配置
- BCB API技巧,只介绍了几个常用的函数
- 几个常用网络/服务器监控开源软件
- 常用的几个开源 API网关管理系统
- CMD的几个常用API
- 几个常用网络/服务器监控开源软件
- 涉及网络编程时,需要用到的几个常用方法
- 几个常用网络/服务器监控开源软件