无法使用Qt在服务器客户端程序中设置全球单播地址

Unable to set global unicast address in Server client program using Qt

我是 IPv6 的新手,我会详细解释我的问题。 使用 Qt 我已经使用 Qt 开发了服务器客户端程序。

->我在服务器和客户端都使用本地 link 地址。

->并且ip地址在终端之间变化,如果我运行服务器从3个终端服务器IP地址与三个终端不同,客户端有不同的ip地址。

->我想从客户端程序中发现 exact/current 服务器地址,以便在 运行 时间与服务器连接。

怎么做,请指点。

第二个问题是,从本地 link 更改为全球单播地址可能 ip -6 neigh show 会起作用,因为全局 link 会暴露在整个网络中。

在这种情况下,我尝试更改以下代码: 上一段代码:QHostAddress地址=QHostAddress::AnyIPv6;服务器启动并保持监听状态。

使用以下代码手动分配全球单播地址。 QHostAddress地址; address.setAddress("2001:0DB8:0000:0002:0022:2217:FF3B:118C"); 这次服务器没有启动,说地址不可用。

请在这方面提出建议。

为了发现连接的服务器,您可以将 UDP 数据报发送到 ff02::1。这是一个多播地址,将到达 link(link-本地范围)上的每个连接的 IPv6 设备。当然,这意味着服务器需要侦听这些数据报。

Simple Service Discovery Protocol (SSDP)就是采用这种方法。

对于你的服务器问题,如果有更多的代码就好了。

假设您做了类似的事情:

QHostAddress address;
address.setAddress("2001:0DB8:0000:0002:0022:2217:FF3B:118C");
QTcpServer server;
server.listen(address)

这意味着你在 2001:0DB8:0000:0002:0022:2217:FF3B:118C 上监听,因此这个地址应该分配给你的接口之一(网卡)。

在参考了几个主题和网站后,我终于得到了答案: 简而言之,我的问题是:我需要从客户端动态查找服务器主机地址。 所以我发现通过网络广播的 UDP 数据报消息将接收到网络中的所有节点,监听节点将使用主机地址和端口响应客户端。

所以首先我尝试通过发送广播消息(仅在 IPv4 中,在 IPv6 中不可用)成功。

在IPv6中广播会做转向MultiCast,以利用组播 从客户端必须绑定多播地址 "ff02::1%eth0" 然后从服务器必须加入多播组 "ff02::1%eth0"

这将成功地帮助发现同一网络中的网络。

如有错误请指正,让我知道您的建议,让我的代码变得更好。

--奎师那.