sockaddr_addr
时间: 2023-12-08 18:37:27 浏览: 40
`sockaddr_in`是一个结构体,用于存储IP地址和端口号。`sockaddr_in`结构体中包含了`sin_family`、`sin_port`、`sin_addr`和`sin_zero`四个成员变量,分别表示地址族、端口号、IP地址和填充字节。在网络编程中,我们通常需要将`sockaddr_in`结构体转换为`sockaddr`结构体,以便在`bind()`、`connect()`等函数中使用。这是因为这些函数的参数类型都是`sockaddr`结构体指针类型,而不是`sockaddr_in`结构体指针类型。因此,我们需要使用强制类型转换将`sockaddr_in`结构体指针转换为`sockaddr`结构体指针,以便在这些函数中使用。
以下是一个示例代码,演示了如何使用`sockaddr_in`结构体和`sockaddr`结构体:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main() {
int sockfd;
struct sockaddr_in my_addr;
// 创建套接字
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
perror("socket");
exit(1);
}
// 绑定IP地址和端口号
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(8080);
my_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
bzero(&(my_addr.sin_zero), 8);
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) {
perror("bind");
exit(1);
}
printf("bind success\n");
return 0;
}
```