我尝试将目标地址转换为 IPv6 格式为 ::ffff:IPv4
.并使用 AF_INET6
的套接字类型。它给 error: Network Unreachable
.但使用相同的技术,我能够从 IPV4 通信到 IPV6
提前感谢您的帮助。
最佳答案
IPv4 和 IPv6 是不同的协议(protocol)。他们不互相交谈。
在某些操作系统上,您可以使用 IPv6 套接字并接受传入的 IPv4 连接。但这只是让服务器代码的代码开发更容易的软件。我从来没有见过客户端代码的工作。您必须为此创建正确的套接字类型。
通常你使用 DNS 解析主机名,你会得到多个答案(IPv4 和 IPv6),你遍历它们创建所需的套接字类型并尝试连接。如果它有效,则使用该套接字,否则,您进行下一次迭代以创建新套接字等。
如果您的代码对延迟很敏感,您可能希望实现 happy eyeballs算法。
关于sockets - 在 C 中使用套接字如何将消息从 IPv6 发送到 IPv4?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29926870/