2012-07-19 55 views
0

我对获取PC的IP地址有点困惑。我有一个winforms应用程序运行在多台电脑。某些情况下的应用程序必须向其他应用程序发送消息。为此,我向数据库写入关于运行应用程序的pc的信息,其中数据是IP地址。这个想法是使用WCF来通信和广播消息到正在运行的应用程序。 所以,问题是我怎样才能得到工作的IP地址。用一个以太网ip地址,一个wi fi地址和一个vmware地址来映像一个笔记本。我必须选择哪一个?获取使用的IP

这是我使用的代码。但是在笔记本的情况下,它正在返回虚拟机的地址,并且它是无用的。

private String GetMyIp() 
{ 
    String ipAddress = 
     System.Net.Dns.GetHostEntry(
     System.Net.Dns.GetHostName()) 
     .AddressList.First(i => i.AddressFamily.Equals(
     System.Net.Sockets.AddressFamily.InterNetwork)) 
     .ToString(); 
    return ipAddress; 
} 

主要想法是获取具有连接的IP地址。希望清楚。

在此先感谢。

+1

在一行中干扰所有的代码使得难以阅读和难以调试(如果不是不可能的话)。 – 2012-07-19 13:17:33

+0

@SteveWellens--也许他正在模仿流利的api! :) – EkoostikMartin 2012-07-19 13:20:03

+1

如果没有IPv4地址,“First”将失败,并发生异常。 – spender 2012-07-19 13:24:14

回答

1

那么除非你连接它的很多工作为您的计算机来确定哪个卡将使用..或使用。

继承人我所采取的方式。我做了一个连接,然后问,它用来做什么的,其实我用你的代码的一部分,它肯定似乎工作

而且,当然,另一端连接还可以检查远程(例如客户端)的处理以类似的方式..

class Program 
{ 
    static void Main(string[] args) 
    { 
    TcpClient t = new TcpClient("www.microsoft.com", 80); 


    Console.WriteLine(GetMyIp(t.Client.LocalEndPoint.AddressFamily)); 
    t.Close(); 
} 

static private String GetMyIp(AddressFamily addr) 
{ 
    String ipAddress = System.Net.Dns.GetHostEntry(
     System.Net.Dns.GetHostName() 
     ) 
     .AddressList.First(i => i.AddressFamily.Equals(addr)).ToString(); 
    return ipAddress; 
} 

}

+0

非常感谢。它运行良好,但问题是生产环境没有互联网连接。 – 2012-07-19 13:37:09

+0

那么这个例子是“一个”连接,如果你连接到你自己的系统,你会使用*那个连接,而不是你刚刚创建的连接。 – BugFinder 2012-07-19 13:38:05

+0

Yeap。我在想那个 – 2012-07-19 13:43:02

1

有你需要考虑枚举活动的网络连接时,几件事情。如果你有wifi适配器和局域网连接,并且两者都处于活动状态,你希望运行的应用程序使用哪一个?

为什么不使用中央WCF publish-subsribe方法的良好实践,让正在运行的客户端请求中央WCF服务并可能在WCF服务器端存储EndPoint地址?

+0

感谢您的评论。这是一个很好的问题。我必须在系统中,我可以使用e中央wcf服务。但在另一个我不能(因为系统是按照我在问题中描述的方式完成的) – 2012-07-19 13:45:10