`
guoyiqi
  • 浏览: 1010811 次
社区版块
存档分类
最新评论

sockaddr与sockaddr_in比较

 
阅读更多

struct sockaddr {
unsigned short int sa_family; /* address family, AF_xxx */
char sa_data[14]; /* address */
};

sa_family是地址家族,是“AF_xxx”的形式。常设为“AF_INET”,代表Internet(TCP/IP)地址族。

sa_data是协议地址,由sa_family决定。如果sa_family=AF_INET,则sa_data就是sockaddr_in的sin_addr和sin_port。换句话说,这时sockaddr可以当作sockaddr_in看。

struct sockaddr_in {
short int sin_family; /* Address family */
unsigned short int sin_port; /* Port number */
struct in_addr sin_addr; /* Internet address */
unsigned char sin_zero[8]; /*to make same size as struct sockaddr */
};
struct in_addr {
unsigned long s_addr;
};

sin_family意义与sa_family同。
sin_port存储端口号(使用网络字节顺序)
sin_addr存储IP地址,使用in_addr这个数据结构
sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。
在 in_addr结构体中,s_addr按照网络字节顺序存储IP地址。

sin_zero用来将sockaddr_in结构填充到与struct sockaddr同样的长度,可以用bzero()或memset()函数将其置为零。指向sockaddr_in的指针和指向sockaddr的指针可以相互转换,这意味着如果一个函数所需参数类型是sockaddr类型时,你可以在函数调用的时候将一个指向sockaddr_in的指针转换为指向sockaddr的指针;或者相反。

分享到:
评论

相关推荐

    Linux C中sockaddr和sockaddr_in的区别

    `sin_zero`的作用是使`sockaddr_in`的大小与`sockaddr`相同,便于内存对齐和兼容性处理。 在实际编程中,我们通常会先用`sockaddr_in`来初始化和填充网络地址信息,例如设置IP地址和端口号,然后通过类型转换将其...

    VB-API.rar_API_api vb versionEx_vb api_vb api sockaddr_in

    标题中的"VB-API.rar_API_api vb versionEx_vb api_vb api sockaddr_in"暗示了这个压缩包可能包含了一些与VB API相关的代码示例或函数库,特别提到了`versionEx`和`sockaddr_in`。`versionEx`通常是关于获取操作系统...

    apache启动报错:httpd: apr_sockaddr_info_get() failed

    重启apache:service httpd restart虽然重启成功,但却给出如下的提示信息:httpd: apr_sockaddr_info_get() failed for hoteelhttpd: Could not reliably determine the server’s fully qualified domain name, ...

    网络文件传输程序

    struct sockaddr_in server_addr; struct sockaddr_in client_addr; char buff[BUFSIZ]; char fname[255]; //用于存放文件名 FILE * fp; server_addr.sin_family = AF_INET; server_addr.sin_port = htons...

    udp.rar_UDP_udp linux

    需要构造一个`sockaddr_in`结构体来存储IP地址和端口信息。 ```c struct sockaddr_in server_addr; memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s...

    获取本地IP(MFC)

    SOCKADDR_IN6* sockaddr_in6 = (SOCKADDR_IN6*)sockaddr; char ipStringBuffer[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, &sockaddr_in6->sin6_addr, ipStringBuffer, INET6_ADDRSTRLEN); // 输出或处理IPv6地址 ...

    socket 聊天源码

    struct sockaddr_in server_address; struct sockaddr_in client_address; server_sockfd=socket(AF_INET,SOCK_STREAM,0); server_address.sin_family=AF_INET; server_address.sin_addr.s_addr=htonl('192....

    c++(tcp,udp传送实例)

    sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); server_addr.sin_addr.s_addr = INADDR_ANY; bind(server_sock, (sockaddr*)&server_addr, sizeof(server_...

    linux下TCP,UDP的C代码

    struct sockaddr_in server_addr, client_addr; socklen_t addr_len = sizeof(struct sockaddr_in); // 创建套接字 server_socket = socket(AF_INET, SOCK_STREAM, 0); // 配置服务器地址信息 memset(&...

    UDP-Clinet-and-Server.rar_C++ UDP通讯_UDP_udp 通讯_udp通讯_udp通讯 c

    2. **设置地址结构**:使用`sockaddr_in`结构体填充服务器或客户端的IP地址和端口号,如`inet_addr()`用于转换IP地址字符串。 3. **绑定**:服务器端使用`bind()`函数将套接字与特定的本地IP和端口绑定。 4. **...

    tcp.rar_tcp

    接着,需要设置服务器的地址信息,即`struct sockaddr_in`结构体。这包括服务器的IP地址(可以是INADDR_ANY表示任意可用的本地地址)和端口号。 ```c struct sockaddr_in server_addr; memset(&server_addr, 0, ...

    http代理服务器的实现(程序).rar

    sockaddr_in clientsock_addr; //客户端地址 }CLIENTINFO,*LPCLIENTINFO; CLIENTINFO HttpClientInfo; // typedef struct _SOCKINFO{ //socket信息结构体 SOCKET sourcesock; SOCKET destsock; }SOCKINFO,*...

    http代理服务器的实现(程序).zip

    sockaddr_in clientsock_addr; //客户端地址 }CLIENTINFO,*LPCLIENTINFO; CLIENTINFO HttpClientInfo; // typedef struct _SOCKINFO{ //socket信息结构体 SOCKET sourcesock; SOCKET destsock; }SOCKINFO,*...

    UDP_DEMO.rar_DEMO_UDP C++ 数据_UDP接收

    接下来,我们需要设置服务器或客户端的网络地址结构`sockaddr_in`,用于指定通信的目标或源地址。这包括IP地址和端口号: ```cpp struct sockaddr_in server_addr; memset(&server_addr, 0, sizeof(server_addr)); ...

    udp_test.zip_Programming with C_linux UDP

    创建一个`sockaddr_in`实例,设置IPv4地址(INADDR_ANY表示接收任何IP地址的连接)和端口号。 ```c struct sockaddr_in server_addr; memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_...

    MyQQ开发文档

    "MyQQ开发文档" 本文档是关于MyQQ开发设计文档,旨在设计一个服务器客户端型聊天程序,...SOCKADDR_IN m_SendToAddr;//发送信息地址 SOCKET SendToSocket;//发送信息套接字 SOCKET m_sendSocket;//接收好友信息套接字

    网络编程,TCP服务端与客户端代码(c语言)

    struct sockaddr_in serv_addr; memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(port_number); bind...

    linux网络编程常用函数详解与实例(socket-bind-listen-accept)(.pdf

    struct in_addr sin_addr; // IP地址,通常设为INADDR_ANY(任意可用IP) unsigned char sin_zero[8]; // 填充位 }; ``` 3. `listen`函数: `listen`函数将已绑定的套接字转换为监听套接字,等待客户端的连接...

Global site tag (gtag.js) - Google Analytics