UDP客户端/服务器:混合使用IPv4和IPv6?

问题描述 投票:0回答:1

假设您有一个同时具有IPv4和IPv6地址的服务器上运行的仅UDP的游戏服务器。服务器启动,调用getaddrinfo()遍历可用地址,然后说它获取了IPv6地址。因此,它在IPv6上创建了它的套接字,并等待来自客户端的数据包。

客户端尝试连接,但是这次使用的是用户输入的IPv4地址。它创建一个IPv4套接字,并尝试连接到服务器。差异实际上重要吗?还是IPv4套接字和IPv6套接字之间的区别在本地计算机上停止了?

同样,如果客户端已经创建了一个要使用的IPv6套接字(因为getaddrinfo()表示它是有效的),然后它调用getaddrinfo()来查找服务器的地址,如果仅获得IPv4结果该怎么办? ?我知道我可以告诉getaddrinfo()仅给出IPv6结果,但是如果服务器没有IPv6地址怎么办? UDP客户端是否应该关闭并重新创建其套接字以匹配服务器地址格式?还是可以保证得到我要求的地址格式?

(我欢迎任何能回答这些问题的文档参考。我已经进行了数小时的研究,但尚未找到针对这些问题的明确答案。)]] >>

假设您有一个同时具有IPv4和IPv6地址的服务器上运行的仅UDP的游戏服务器。服务器启动,调用getaddrinfo()遍历可用地址,并说它...

sockets udp client-server ipv6
1个回答
1
投票

默认情况下,IPv6 UDP套接字将仅发送和接收IPv6 UDP数据包,因此您的IPv4客户端会很不走运。

但是,如果您正在双栈计算机上运行(并且可能正在运行),则可以在套接字上启用IPv4-mapped IPv6 addresses,然后可以使用该套接字来处理IPv4和IPv6 UDP通信。 IPv4数据包将显示为来自特殊格式的IPv6地址(格式为例如“ :: ffff:192.168.0.5”),但否则将以与任何IPv6 UDP客户端相同的方式进行处理。

© www.soinside.com 2019 - 2024. All rights reserved.