服务器和客户端信息获取

服务器和客户端信息获取


字节序转换:
#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

    推荐阅读