2014-01-11 73 views
1

我通过使用Bonjour 1.0(.NET)为服务我的本地家庭网络扫描,regtype = "_http._tcp"什么是主机名,而在卓悦调用的getaddrinfo(....)1.0

enter image description here

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应该是什么,因此我没有得到任何结果:**请看:WHAT ??? ?? HERE在代码**

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("----------------------------------------"); 
     } 



    } 
} 
+0

任何帮助。请。 – Yoda

回答

1

的东西,我会先检查与_http._tcp相关的TXT记录记录。从屏幕截图中选择_axis-video._tcp,并向您显示与之关联的macaddress。许多_http._tcp条目记录到达它所需的url,或所需的端口/ ip地址。我会先深入研究。

否则,您可能必须将macaddress解析为ip地址。我GOOGLE搜索并与http://www.mostthingsweb.com/2011/11/reading-arp-entries-with-c/

+0

现在我可以将mac地址解析为ip地址,但您发布的内容似乎更容易(这是我使用的:http://www.codeproject.com/Tips/358946/Retrieving-IP-and-MAC-addresses-对于-A-LAN)。我会查一下。但我不知道如何得到这个TXT记录。 – Yoda