当前位置: 首页 > 知识库问答 >
问题:

UDP客户机/服务器:混合IPv4和IPv6?

赫连晋
2023-03-14

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

(我欢迎任何能回答这些问题的文档参考。我已经研究了几个小时,但还没有找到这些要点的明确答案。)

共有1个答案

黄流觞
2023-03-14

默认情况下,IPv6 UDP套接字将只发送和接收IPv6 UDP数据包,因此您的IPv4客户端将会倒霉。

但是,如果您运行在双堆栈计算机上(您可能是这样),则可以在套接字上启用IPv4映射的IPv6地址,然后可以使用该套接字处理IPv4和IPv6 UDP通信。IPv4数据包将显示为来自特殊格式的IPv6地址(格式如“::FFFF:192.168.0.5”),但在其他情况下,它们的处理方式与任何IPv6 UDP客户端的处理方式相同。

您可以在套接字上启用IPv4映射的IPv6地址,如下所示:

int v6OnlyEnabled = 0;  // we want v6-only mode disabled, which is to say we want v6-to-v4 compatibility
if (setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &v6OnlyEnabled, sizeof(v6OnlyEnabled)) != 0) perror("setsockopt");
 类似资料:
  • 我正在用Java编写一个客户端-服务器应用程序,客户端和服务器可以通过UDP套接字进行交互,通过TCP套接字进行乒乓交互,用户(客户端)可以通过TCP套接字进行聊天。 我有两个独立的TCP和UDP线程。我将服务器的TCP和UDP功能融合在一起(只需启动TCP和UDP线程)。但我该如何为客户做这件事呢? 我在这里浏览了以下几页: 1)这个家伙为两个独立的客户端分离了TCP和UDP:一个服务器中的Ja

  • 我对使用UDP协议的服务器和客户端之间的通信有一个非常奇怪的问题。客户端是用Mono2x编写的(我使用Unity 3D作为我的客户端)并创建Udp客户端类实例: 我的服务器是 UWP 应用程序,我想在使用 DatagramSocket 的 Raspberry Pi 上运行: 我将数据从客户端发送到服务器,但运气不佳。我用TCPView检查了数据是从我的客户端应用程序发送的,但从未到达服务器。现在是

  • 问题内容: 是否有一个库可以用Java和Javascript为相同的数据生成相同的图表? 我的任务是: 在浏览器中 显示一些动态的动态图表,更好地使用动态工具提示,缩放等(我在这里考虑使用Javascript) 并在Java中在服务器端生成相同(或足够相似)的图表,以通过 电子邮件 自动发送它们(在这种情况下完全没有浏览器)。 我想避免Flash用于iPhone的互操作性。 有一些静态服务器端图表

  • 当涉及到TCP时,Netty确实有很好的文档记录,但我想尝试一个简单的UDP服务器-客户机示例,但没有找到任何好的代码。(主要是邮件列表和据称有错误代码的用户) 有人愿意提供一些简单的例子吗?谢谢!

  • 我正在编写一个基于UDP的客户端服务器,并且已经获得了很多代码,但是我对UDP服务器如何将响应发送回UDP客户端感到困惑,这是我到目前为止的理解: 假设UDP客户端希望与UDP服务器通信,因此它将向UDP服务器发送请求(使用在客户端打开的UDP套接字),现在这将到达UDP服务器上的UDP模块,其中UDP模块将使用端口号标识UDP服务,并将该请求发送到该UDP服务/服务器 我的困惑是,在服务器端,有

  • 我目前正在做一个项目,需要一个UDP通信之间的服务器亚马逊法兰克福)和几个主机(Arduino)。我需要能够发送JSON数据从服务器到主机通过UDP,它需要实时工作(时间是一个真正的限制在这里)。此外,主机将定期与服务器通话,通知服务器其状态。 我面临的问题是,虽然我可以ping服务器,但当我创建带有端口的UDP套接字时,我会得到这个错误(对于任何端口): errno99:无法分配请求的地址 我也