0

编程新手,但试图自学一些学校尚未向我展示的领域。

正在运行的项目的宏伟计划是接受客户端到服务器的连接。在控制台窗口中,它将显示连接时间。我也试图让它显示客户端 IP 地址以进行记录。以下是我所拥有的,但我无法正确解析它。

//Console Output
string IPAddress = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.GetValue(0).ToString();
IPAddress address = IPAddress.Parse(ipAddress);
Console.WriteLine("New TCP connection made at " + "{0:g}", DateTime.Now + IPAddress);

如果我省略“IPAddress address......”行,它将显示长而丑陋的未解析地址 =p

4

2 回答 2

0

我也试图让它显示客户端 IP 地址以进行记录。

请记住,客户端上可能有多个 NIC,即有线/无线(以及多于有线 NIC)。这意味着将有多个 IP 地址,并且很可能是 IPv4 和 IPv6 地址的混合。

使用Dns.GetHostEntry方法时,传递一个空字符串作为主机名将返回本地主机的 IPv4 地址:

IPHostEntry entry = Dns.GetHostEntry( string.Empty );

或者,您可以使用:

IPHostEntry entry = Dns.GetHostEntry( Dns.GetHostName() );

然后,要查找所有地址,请使用AddressFamily Enumeration

var addresses = entry.AddressList.Where( x => x.AddressFamily == AddressFamily.InterNetwork );

其中AddressFamily.InterNetwork= IP 版本 4 的地址。

从这里,您可以根据需要遍历addresses

于 2013-02-06T04:17:16.773 回答
0

您需要查看地址列表中的所有 IP 地址并丢弃 IPV6 的地址。

IPAddress[] ipv4Addresses = Array.FindAll(
    Dns.GetHostEntry(string.Empty).AddressList,
    a => a.AddressFamily == AddressFamily.InterNetwork);

有关 AddressFamily 类型的信息,请参阅此链接

于 2013-02-06T04:03:17.550 回答