2010-04-15 51 views
3

编写一个cleint /服务器工具我的任务是尝试查找要连接的服务器。我很乐意为用户尽可能地简化操作。因此,我的想法是:C#/。NET:找出是否存在服务器,查询DNS以获取SVC记录

  • 检查是否特定服务器(按名称编码)存在(如“mail.xxx”为邮件服务器,例如 - 我exampüle是不是邮件服务器;)
  • 以其他方式查询DNS SVC记录的查询,允许管理员为特定的服务器(客户端连接到)配置服务器位置。

结果是用户可能只需要输入一个域名,甚至可能甚至没有(在LAN环境中使用计算机的注册标准域)。

任何想法如何:

  • 要找出一个服务器中是否存在和答案(即在线)最快方法是什么?如果服务器不在,TCP可能需要很长时间。 UDP风格的ping听起来对我来说是个好主意。 PING本身可能不可用。
  • Anyonw知道如何从.NET中最好地向特定(缺省)域中的SVC记录请求?

回答

1

最好的方式来测试一个服务存在和活着很可能使用该服务的本地协议。否则,我会去ping(ICMP ECHO)。至于查找SRV记录(我认为你的意思是“SRV”没有“SVC”类型),你可以使用“DNS客户端库.NET”(http://www.simpledns.com/dns-client-lib.aspx) - 例如:

var Response = JHSoftware.DnsClient.Lookup("_ftp._tcp.xyz.com", 
             JHSoftware.DnsClient.RecordType.SRV); 
4

你可以使用ping从.NET,但它需要服务器的IP地址。

here

internal bool PingServer() 
{ 
    bool netOK = false; 
    // 164.110.12.144 is current server address for server: nwhqsesan02 

    byte[] AddrBytes = new byte[] { 164, 110, 12, 144 }; // byte array for server address. 
    using (System.Net.NetworkInformation.Ping png = new System.Net.NetworkInformation.Ping()) 
    { 
     System.Net.IPAddress addr; 
     // Sending ping to a numeric byte address has the best change of 
     // never causing en exception, whether network connected or not. 
     addr = new System.Net.IPAddress(AddrBytes); 
     try 
     { 
      netOK = (png.Send(addr, 1500, new byte[] { 0, 1, 2, 3 }).Status == IPStatus.Success); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
      netOK = false; 
     } 
     return netOK; 
    } 
} 

编辑:这个怎么样:

bool ConnectionExists() 
{ 
    try 
    { 
     System.Net.Sockets.TcpClient clnt=new System.Net.Sockets.TcpClient("www.google.com",80); 
     clnt.Close(); 
     return true; 
    } 
    catch(System.Exception ex) 
    { 
     return false; 
    } 
} 
+0

不起作用。 PING需要服务器允许ICMP--这是“我不能在客户站点执行的事情”(是的,我无法平衡我连接的一半服务 - 在金融行业愚蠢的疯狂思维)。 – TomTom 2010-04-15 16:13:32

+0

金融业啊,它不疯狂,他们有我们所有的钱。检查我的更新,如果有效。 – 2010-04-15 16:46:47

+0

这并不告诉我我的自己的软件服务器在哪里。这不是“查找我是否有互联网”,而是让我自己的软件在局域网场景中尝试猜测它自己的(安装的)服务器,以便人们不必输入服务器名称。与例如Exchange Auto-Config类似,或者与Office Communicator为自己查找OCS实例的方式类似。 – TomTom 2010-04-17 16:12:36

2

您的问题,我会推荐一个完全不同的解决方案:“你在那里”

  1. 在服务器上的一些自定义端口,在那里你接受一些关于实施ICMP服务器消息,并回答“是的,我是”;
  2. 在客户端,您向您的特定端口广播了“您在那里”消息。 这样你的客户端就会知道哪些是可用的服务器。它将工作得更快,并且没有安装或配置任何dns服务。
+1

除了退化的简单网络(两者之间没有路由),它们不适用于任何事情。我的客户端和服务器严格分开 - 广播无法正常工作。看起来像某种注册表/域的条目是我所能做的。 – TomTom 2011-11-21 11:47:46

相关问题