无法使用Qt在服务器客户端程序中设置全局单播地址
我是IPv6新手,我将详细解释我的问题。 使用Qt我已经开发了使用Qt的服务器客户端程序 ->我在服务器和客户端都使用了本地链接地址 ->并且ip地址会随着终端的不同而变化,如果我从3个终端运行服务器,那么服务器ip地址与3个终端不同,客户端的ip地址也不同 ->我想从客户端程序中发现确切的/当前的服务器地址,以便在运行时与服务器连接 我该怎么做,请建议 第二个问题是,在从本地链接更改为全局单播地址时,ip-6 neigh show可能会起作用,因为全局链接将在整个网络中公开 在本例中,我尝试更改以下代码: 以前的代码:QHostAddress address=QHostAddress::AnyIPv6;服务器启动并保持侦听状态 使用以下代码手动分配全局单播地址。 QHostAddress地址; address.setAddress(“2001:0DB8:0000:0002:0022:2217:FF3B:118C”); 这次服务器未启动,说明地址不可用无法使用Qt在服务器客户端程序中设置全局单播地址,qt,networking,ipv6,ethernet,Qt,Networking,Ipv6,Ethernet,我是IPv6新手,我将详细解释我的问题。 使用Qt我已经开发了使用Qt的服务器客户端程序 ->我在服务器和客户端都使用了本地链接地址 ->并且ip地址会随着终端的不同而变化,如果我从3个终端运行服务器,那么服务器ip地址与3个终端不同,客户端的ip地址也不同 ->我想从客户端程序中发现确切的/当前的服务器地址,以便在运行时与服务器连接 我该怎么做,请建议 第二个问题是,在从本地链接更改为全局单播地址时,ip-6 neigh show可能会起作用,因为全局链接将在整个网络中公开 在本例中,我尝试更
请就此提出建议。要查找连接的服务器,您可以将UDP数据报发送到
ff02::1
。这是一个多播地址,将到达链路上的每个已连接IPv6设备(链路本地范围)。当然,这意味着服务器需要监听这些数据报
政府使用这种方法
对于您的服务器问题,最好有更多的代码
假设你做了类似的事情:
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数据报发送到ff02::1
。这是一个多播地址,将到达链路上的每个已连接IPv6设备(链路本地范围)。当然,这意味着服务器需要监听这些数据报
政府使用这种方法
对于您的服务器问题,最好有更多的代码
假设你做了类似的事情:
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中广播将做转向多播,利用多播
从客户端必须绑定多播地址“ff02::1%eth0”,然后从服务器必须加入多播组“ff02::1%eth0”
这将成功地帮助发现同一网络中的网络
请纠正我,如果有任何错误,让我知道你的建议,使我的代码更好
--奎师那。在参考了几个主题和网站后,我终于得到了答案: 简而言之,我的问题是:我需要从客户端动态地找到服务器主机地址。 所以我在广播UDP数据报消息上发现了一些东西,通过网络将接收到的信息发送到网络中的所有节点,监听节点将用主机地址和端口回复到客户端 因此,首先我尝试发送广播消息(仅在IPv4中,IPv6中不可用),这是成功的 在IPv6中广播将做转向多播,利用多播 从客户端必须绑定多播地址“ff02::1%eth0”,然后从服务器必须加入多播组“ff02::1%eth0” 这将成功地帮助发现同一网络中的网络 请纠正我,如果有任何错误,让我知道你的建议,使我的代码更好
--奎师那。谢谢你的详细解释。对于第二个Qs,您提供的代码,我正在以相同的方式进行操作,但是当我尝试从具有相同IP地址的客户端连接时,它没有连接,请告诉我是否需要配置任何东西以使用全局单播地址??关于查找ip地址,请提供查找ip地址的示例代码,并让我知道此查找方法可以查找链接本地地址?您不需要配置任何特定内容,可以提供更多信息吗?就像电脑的物理连接方式一样,如果你能从一台电脑ping另一台电脑,你的网卡的配置和其他一些代码是什么,特别是你配置插座的代码。@krishna似乎你不太了解IP网络是如何工作的。您不会直接发现地址。当你发送一个多播数据包时,一些网络节点可能会捕捉到它并做出响应。您发现的是将为您提供IP地址的响应,这些地址是响应节点选择放入其响应中的任何地址。此外,我将不为此提供示例代码,这是UPD的基础:在一台机器上打开套接字并侦听,在另一台机器上打开套接字并发送数据。这在QUdpSocket文档中有很好的文档记录。我能够用静态和本地链接IP地址连接服务器和客户端,即从一个终端生成的IPv6本地链接地址是:FE80::42:AFF:FE42:2002,从运行客户端的第二个终端,我将此静态IP地址作为下面的代码QString IP=“FE80::42:AFF:FE42:2002%eth0”;Socket->connectToHostEncrypted(ip,1200,domainName.localDomainName());这很好用。现在我的问题是我想找出/发现服务器