我有一个绑定到127.0.0.1
的TCP套接字,我希望它在本地计算机上作为服务提供。但问题是Bonjour使用DHCP地址而不是localhost,即使将kDNSServiceInterfaceIndexLocalOnly
设置为接口也是如此。这可以防止我实际连接到套接字。
那么我该怎么做才能让服务解析为127.0.0.1
而不是192.168.xxx.xxx
?
我在C ++中使用最新的bonjour SDK for Windows,尽管它在所有操作系统上应该都是一样的。
目前我只使用以下函数调用来注册服务:
DNSServiceRef ref = m_Impl->m_ConnectionRef.get();
DNSServiceRegister(&ref, kDNSServiceFlagsShareConnection, // Handles and flags
kDNSServiceInterfaceIndexLocalOnly, a_Name.c_str(), a_Service.GetServiceType().c_str(), nullptr, // Service name and type
nullptr, HostToBigEndian(a_Service.GetPort()), // Host address
static_cast<uint16>(a_Service.GetTXTRecord().GetRecord().length()), a_Service.GetTXTRecord().GetRecord().c_str(), // TXT record
&MDNSServiceManagerImpl::StaticDNSServiceRegisterReply, service.get()); // Callback
我尝试将"127.0.0.1"
作为主机名而不是nullptr
,但正如API评论所说,您必须手动添加记录,这就是我迷路的地方。