服务器和客户端信息获取
字节序转换:
#include<arpa/inet.h>
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<sys/scoket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
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<netdb.h>
原型: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<netdb.h>
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/,转载请务必注明出处
原文地址:http://qianyang.blog.51cto.com/7130735/1614912