【问题标题】:What is the hostname while invoking GetAddrInfo(....) in Bonjour 1.0在 Bonjour 1.0 中调用 GetAddrInfo(....) 时的主机名是什么
【发布时间】:2014-01-11 17:27:15
【问题描述】:

我使用Bonjour 1.0(.NET) 通过我的本地家庭网络扫描regtype = "_http._tcp" 的服务:

 DNSSDService service = new DNSSDService();
            DNSSDEventManager eventManager = new DNSSDEventManager();
            eventManager.ServiceFound += new _IDNSSDEvents_ServiceFoundEventHandler(eventManager_ServiceFound);
            DNSSDService browse = service.Browse(0, 0, "_http._tcp", null, eventManager);

当我找到服务时,方法:static void eventManager_ServiceFound(DNSSDService browser, DNSSDFlags flags, uint ifIndex, string serviceName, string regtype, string domain) 被调用。

然后在那个方法中我想使用方法:DNSSDService GetAddrInfo(DNSSDFlags glags, uint ifIndex, DNSSDAddressFamily addressFamily,string hostname, DNSSDEventManager eventManager)来了解服务的IP地址和端口。

问题是我不知道 string hostname 应该是什么,因此我没有得到任何结果:** 请看:?? ?这里有什么?在代码中**

 static void eventManager_ServiceFound(DNSSDService browser, DNSSDFlags flags, uint ifIndex, string serviceName, string regtype, string domain) {
            Console.WriteLine("browser: " + browser + "\nDNSSDFlags " +  flags+ "\nifIndex " + ifIndex +"\nserviceName: " + serviceName + "\nregtype: " +regtype+ "\ndomain: "+ domain);
            DNSSDEventManager eventManager = new DNSSDEventManager();
            eventManager.AddressFound += new _IDNSSDEvents_AddressFoundEventHandler(eventManager_AddressFound);
            DNSSDAddressFamily family = new DNSSDAddressFamily();
            browser.GetAddrInfo(flags, ifIndex, family, ???WHAT HERE???, eventManager);
        }

        private static void eventManager_AddressFound(DNSSDService service, DNSSDFlags flags, uint ifIndex, string hostname, DNSSDAddressFamily addressFamily, string address, uint ttl) {
            Console.WriteLine("----------------------------------------");
            Console.WriteLine("FOUND THE ADDRESS");
            Console.WriteLine("----------------------------------------");
        }

输出:

browser: System.__ComObject
DNSSDFlags 2
ifIndex 32
serviceName: AXIS M1011-W - 00408CBEEAE5
regtype: _http._tcp.
domain: local.

完整代码:

using Bonjour;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApplication1 {
    static class Program {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main() {
            DNSSDService service = new DNSSDService();
            DNSSDEventManager eventManager = new DNSSDEventManager();
            eventManager.ServiceFound += new _IDNSSDEvents_ServiceFoundEventHandler(eventManager_ServiceFound);
         //   DNSSDService browse = service.Browse(0, 0, "_axis-video._tcp", null, eventManager);
            DNSSDService browse = service.Browse(0, 0, "_http._tcp", null, eventManager);


            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
        static void eventManager_ServiceFound(DNSSDService browser, DNSSDFlags flags, uint ifIndex, string serviceName, string regtype, string domain) {
            Console.WriteLine("browser: " + browser + "\nDNSSDFlags " +  flags+ "\nifIndex " + ifIndex +"\nserviceName: " + serviceName + "\nregtype: " +regtype+ "\ndomain: "+ domain);
            DNSSDEventManager eventManager = new DNSSDEventManager();
            eventManager.AddressFound += new _IDNSSDEvents_AddressFoundEventHandler(eventManager_AddressFound);
            DNSSDAddressFamily family = new DNSSDAddressFamily();
            browser.GetAddrInfo(flags, ifIndex, family, ?????WHAT HERE?????, eventManager);
        }

        private static void eventManager_AddressFound(DNSSDService service, DNSSDFlags flags, uint ifIndex, string hostname, DNSSDAddressFamily addressFamily, string address, uint ttl) {
            Console.WriteLine("----------------------------------------");
            Console.WriteLine("FOUND ADDRESS");
            Console.WriteLine("----------------------------------------");
        }



    }
}

【问题讨论】:

    标签: c# .net bonjour


    【解决方案1】:

    我首先要检查的是与 _http._tcp 记录关联的 TXT 记录。从屏幕截图中,您选择了 _axis-video._tcp,它会显示与之关联的 macaddress。许多 _http._tcp 条目记录了访问它所需的 url,或所需的端口/IP 地址。我会先深入研究。

    否则您可能必须将 macaddress 解析为 ipaddress。我用谷歌搜索了http://www.mostthingsweb.com/2011/11/reading-arp-entries-with-c/

    【讨论】:

    • 现在我可以将mac地址解析为ip地址,但是你发布的似乎更容易(这是我使用的:codeproject.com/Tips/358946/…)。我会查一下。但我不知道如何获取此 TXT 记录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2021-08-27
    相关资源
    最近更新 更多