socket 支持 ipv6

由于六一儿童节过后,苹果审核需要支持ipv6,公司app被拒了,于是研究了一下ipv6,查阅了大量资料 ,和 另外项目组的同事一起研究出了结果,现整理如下,以作备忘:


首先,在ipv4时,直接传入ip地址,但ipv6和ipv4的 ip地址格式不一样,因此最好是传入域名;


其次,根据域名解析出当前地址,调用getaddrinfo函数,传入域名 和 “http”,进行解析;


最后,创建socket,根据不同地址来进行相应的连接connect处理;


代码如下所示:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中的 Socket 编程可以使用 IPv6 协议进行网络通信。IPv6 是 Internet 协议的下一代,它的地址长度比 IPv4 更长,具有更多的地址空间,能够支持更多的设备连接到互联网上。 IPv6 的地址格式与 IPv4 不同,采用冒号分隔的 16 位数值表示,例如: ``` 2001:0db8:85a3:0000:0000:8a2e:0370:7334 ``` 在 C 语言中,使用 IPv6 进行 Socket 编程的步骤与使用 IPv4 类似,需要创建 Socket、绑定地址、监听和连接等。 下面是一个简单的 IPv6 Socket 服务器的例子: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define PORT 8080 int main(int argc, char const *argv[]) { int fd, new_fd, valread; struct sockaddr_in6 address; int addrlen = sizeof(address); char buffer[1024] = {0}; char *hello = "Hello from server"; // 创建 Socket if ((fd = socket(AF_INET6, SOCK_STREAM, 0)) == 0) { perror("socket failed"); exit(EXIT_FAILURE); } // 设置地址 address.sin6_family = AF_INET6; address.sin6_addr = in6addr_any; address.sin6_port = htons( PORT ); // 绑定地址 if (bind(fd, (struct sockaddr *)&address, sizeof(address))<0) { perror("bind failed"); exit(EXIT_FAILURE); } // 监听 if (listen(fd, 3) < 0) { perror("listen"); exit(EXIT_FAILURE); } // 等待连接 if ((new_fd = accept(fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) { perror("accept"); exit(EXIT_FAILURE); } // 读取数据 valread = read( new_fd , buffer, 1024); printf("%s\n",buffer ); send(new_fd , hello , strlen(hello) , 0 ); printf("Hello message sent\n"); return 0; } ``` 在上面的例子中,我们使用 `socket(AF_INET6, SOCK_STREAM, 0)` 创建了一个 IPv6 的 TCP Socket,然后设置了地址 `address.sin6_family = AF_INET6;` ,并将其绑定到了端口 `PORT` 上。然后通过 `listen()` 开始监听客户端连接请求,等待客户端连接。当有客户端连接时,通过 `accept()` 接受连接,并读取客户端发送的数据,并发送回一条消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值