在.Net中获取IP地址的正确方法是什么?

问题描述:

我有两个独立的exe的Parent.exe和Child.exe。在.Net中获取IP地址的正确方法是什么?

Parent.exe打开Child.exe,某些操作由用户在child.exe中执行然后 child.exe将一些处理后的数据发送回Parent.exe。这两个exe的停留在同一台机器上

Child.Exe和Parent.Exe之间的通信通过TCP IP(套接字编程)完成。为此,我们需要计算本地IP地址,我们用来计算它以下列方式: -

 string hostname = Dns.GetHostName(); 

     IPHostEntry ipEntry = Dns.GetHostEntry(hostname); 
     IPAddress[] addr = ipEntry.AddressList; 
     string FinalIpAddrs = addr[0] 

一切正常,在XP中,但在Windows 7中,我们所面临的问题。下面的行返回Mac地址什么是正确的方式来做到这一点,以便它可以在XP和Win7上运行?

 string FinalIpAddrs = addr[0] 
+0

XP是什么问题? – BugFinder 2012-07-06 06:24:33

+1

如果两个exe都在同一台机器上,为什么不使用127.0.0.1,localhost或命名管道? – 2012-07-06 06:26:13

+0

其实我忘了提及应用程序的设计方式,client.exe可以放在另一台机器上 – Deepesh 2012-07-06 09:22:14

哦,那些wh程序,不知道。

  • 您不需要知道IP地址,请使用127.0.0.1,这是一个本地环回地址。像这样的SImple - 正是出于这个原因。

  • 考虑高效。如果这是同一台机器,则TCP的使用情况很糟糕。使用命名管道是一种Windows集成通信机制,它可以跨越机器工作,但在同一台机器上使用共享内存,这比TCP更有效。

+0

其实我忘了提到应用程序的设计方式是client.exe可以放在另一台机器上以及 – Deepesh 2012-07-06 09:22:02

+0

那么,仍然 - 在这种情况下找到IP地址可能会让你错误的 - 这些日子里有多MULTIPLE,尤其是如果你考虑到计算机通常有2-3(链接,本地,公共)的IPv6考虑。 – TomTom 2012-07-06 09:26:50

+0

对,我想从IPv4中取出ip,那么正确的方法是什么? – Deepesh 2012-07-06 09:32:23

是否有特定要求不使用127.0.0.1?如果不是,那么我只是没有任何计算就使用它。

为什么不只是使用IPAddress.Loopback(或IPv6Loopback)?

环回地址是专为完全在同一主机上通信而设计的。


我也猜测,在那里你说:

以下行返回的Mac地址

你真正的意思是,它返回的IPv6地址。该代码无法返回MAC地址。

+0

正确的MAC地址我的意思是说它返回IPV6地址 – Deepesh 2012-07-06 09:23:06