服务器和客户端信息获取
服务器和客户端信息获取
字节序转换:
#include
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(tint16_t netshort);
字符串IP地址和二进制IP地址转换:
#include
#include
#include
int inet_aton(const char *cp,struct in_addr *inp);
//四段式到in_addr
in_addr_t inet_addr(const char *cp);
//将字符串转换为in_addr
in_addr_t inet_network(const char *cp);
将字符串地址的网络部分转为in_addr
char *inet_ntoa(struct in_addr in);
//将in_addr结构地址转为字符串
struct in_addr inet_makeaddr(int net,int host);
//将网络地址和主机地址合成ip地址
in_addr_t inet_lnaof(struct in_addr in);
//获得地址的主机部分
in_addr_t inet_netof(struct in_addr in);
//获得地址的网络部分
判断是否合法的套接字描述符:
int issockettype(int fd)
{
struct stat st;
int err=fstat(fd,&st);
if(err<0)
return -1;
if((st.st_mode&S_IFMT)==S_IFSOCK){
return 1;
}else
{
return 0;
}
}
获取主机信息函数:
gethostbyname()函数:#include
原型:struct hostent *gethostbyname(const char *name);
当返回值为NULL时,错误类型可由errno获得
HOST_NOT_FOUND
查不到相关主机
NO_ADDRESS和NO_DATA
名称合法但没有合适的IP
NO_RECOVERY
域名服务器不响应
TRY_AGAIN
域名服务器当前出现临时性错误,稍后再试
struct hostent结构:
struct hostent {
char *h_name;
//主机的正式名称
char **h_aliases;
//别名列表
int h_addrtype;
//主机地址类型
int h_length;
//地址长度
char **h_addr_list;
//地址列表,以NULL结尾
}
gethostbyaddr()函数
struct hostent *gethostbyaddr(const void *addr,int len,int type);
type在ipv4的情况下为AF_INET
协议名称处理函数:
#include
struct protoent *getprotoent(void);
//从协议文件中读一行
struct protoent *getprotobyname(const char *name);
//从协议文件中找到匹配的行
struct protoent *getprotobynumber(int proto);
//按照协议类型的值获取匹配项
void setprotoent(int stayopen);
//设置协议文件打开的状态
void endprotoent(void);
//关闭协议文件
本文出自http://qianyang.blog.51cto.com/,转载请务必注明出处
【服务器和客户端信息获取】转载于:https://blog.51cto.com/qianyang/1614912
推荐阅读
- 急于表达——往往欲速则不达
- 第三节|第三节 快乐和幸福(12)
- 20170612时间和注意力开销记录
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- 对称加密和非对称加密的区别
- 眼光要放高远
- 樱花雨
- 前任
- 2020-04-07vue中Axios的封装和API接口的管理
- 烦恼和幸福