繁体   English   中英

Winsock2 C ++:如何找到IPv4客户端将数据包发送到IPv6服务器的地址?

[英]Winsock2 C++: How do I find the address for an IPv4 client to send a packet to an IPv6 server?

我一直在尝试使用IPv6设置UDP服务器,该服务器接受来自IPv4和IPv6客户端的数据包。 我正在Windows中使用带有代码块的C ++中的winsock2进行编程。 我已经成功地从一个朋友那里接收并反弹了来自IPv6的数据包。 当我发送到本地地址10.0.0.90(静态)和127.0.0.1(环回)时,我还可以通过IPv4接收和反弹自己的数据包。 显然,当另一个网络上的朋友尝试通过Internet发送到那些本地地址时,我的一端没有收到任何数据包。 我在哪里可以找到IPv4地址,以便仅IPv4的客户端可以通过Internet成功发送到IPv6服务器?

当我通过127.0.0.1的getaddrinfo()ping我自己时,生成的addrinfo结构包含一个空白的通配符ipv4地址(0.0.0.0),没有ipv6地址。

当我使用getaddrinfo()对自己的IPv6地址进行ping操作时,仅获得一个具有相同IPv6地址的ipv6 addrinfo结构,而没有IPv4结构。

当我使用目标的NULL值调用getaddrinfo()时,会得到两个addrinfo结构,它们都包含IPv4和IPv6位置的通配符值。

这个问题开始 ,我收集到一个要使用ipv4客户端连接到IPv6服务器的地址,您需要使用ipv4映射的ipv6地址。 我的问题是我不确定我是否还有一个ipv4地址。 当我访问www.whatismyipaddress.com时,仅获得一个ipv6公共地址。

这些试验都没有为我提供可以提供给仅ipv4客户端的ipv4地址,现在我完全陷入了困境。 我已经处理了绑定到通配IP和禁用IPV6_V6ONLY的问题。 一切正常,但我不知道还有什么地方可以寻找目标地址。 有人可以向我提示正确的方向吗? 谢谢!

目标地址是服务器的IPv4地址。 禁用V6ONLY后,您的IPv6套接字可以接收IPv4数据包,但是您的服务器仍需要具有可访问的IPv4地址。 如果没有IPv4地址,则仅IPv4的客户端无法与您联系。

IPv4映射的IPv6地址仅表示IPv6软件中的IPv4地址。 但是您仍然需要一个IPv4地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM