服务器和客户端信息获取


字节序转换:

#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/,转载请务必注明出处