新编程,但试图自我教导学校尚未向我展示的一些领域。
项目的宏伟计划是接受客户端与服务器的连接。在控制台窗口中,它将显示连接时间。我也试图让它显示客户端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
答案 0 :(得分:0)
您需要查看地址列表中的所有IP地址并丢弃IPV6地址。
IPAddress[] ipv4Addresses = Array.FindAll(
Dns.GetHostEntry(string.Empty).AddressList,
a => a.AddressFamily == AddressFamily.InterNetwork);
有关AddressFamily类型,请参阅this link。
答案 1 :(得分: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
。