通用的socket地址

来源:互联网 发布:js修改div背景颜色 编辑:程序博客网 时间:2024/04/30 19:16

通用的socket地址

#include<bits/scoket.h>struct sockaddr{    sa_family_t sa_family;    char sa_data[14];}sa_family成员是地址族类型PF(AF)_UNIX,PF(AF)_INET,PF(AF)_INET6sa长度不够,定义了新的通用的存储结构    struct sockeaddr_storage{        sa_family_t sa_family;        unsigned long int _ss_align;        char __ss_padding[128-sizeof(__ss_align)]    }上述的两个通用的socket结构不常用,操作不方便专业的socket#include<sys/un.h>struct socketaddr_un{    sa_family_t sin_family;//地址族    char sun_path[108];//文件路径名}TCP/IP协议族有sockaddr_in sockaddr_in6两个专用结构体用于ip4,ip6struct sockadd_in{    sa_family_t sin_family;//AF_INET    u_int16_t sin_port;//端口    struct in_addr sin_addr;//ipv4地址结构}struct in_add{    u_int32_t s_addr;//ipv4网络字节序列};struct sockaddr_in6{    sa_family_t sin6_family;//AF_INET    u_int16_t sin6_port;//端口    struct     struct in6_addr sin6_addr;//地址    u_int32_t sin6_scope_id;};struct in6_add{    unsigned char sa_addr[16];//ipv6网络字节序列};

ip地址转换函数

in_addr_t inet_addr(const char* strptr); int inet_aton(const char*cp,struct in_addr);char* inet_ntoa(struct in_addr in);

对于ipv6

//af协议族 inet_pton(int af,char* src,void* dist);//转换成网络多字 const char* inet_ntop(int af,const void* src,char* dist,socket_len nt);//转换成字符串socket_len nt 指定存储目标的大小
/** * */#include <stdio.h>#include <arpa/inet.h>void ipChange();int main(int argc, const char * argv[]) {    ipChange();    return 0;}void ipChange(){    //struct in_addr s1;    in_addr_t t1;    t1 = inet_addr("221.179.10.13");    struct in_addr ia;    inet_aton("221.179.10.13", &ia);    printf("ia.s_addr=%d\n",ia.s_addr);    printf("real_ip=%s",inet_ntoa(ia));}
0 0