我有一个由TcpListener表示的服务器,我需要它的FQDN。 有没有办法可以得到它? 监听器定义为:
TcpListener tcpListener = new TcpListener(IPAddress.Any, 27015);
答案 0 :(得分:0)
我的简短回答是构建FQDN的简单方法。如果您的服务器实现多个网络接口,则可能会失败。
public string FQDN() {
string host = System.Net.Dns.GetHostName();
string domain = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName;
return host + "." + domain;
}
<小时/> 由于您使用
TCPListener
初始化IPAddress.Any
,因此根据MSDN
底层服务提供商将分配最合适的网络地址。
这意味着,您必须等到客户端连接才能检索FQDN,因为您事先不知道将分配哪个网络地址(如果您的服务器实现了多个网络接口,则不会知道客户将连接到哪一个。) 需要三个步骤来获取客户端连接到的网络接口的FQDN:
在代码中它看起来像这样:
//using System.Net
//using System.Net.Sockets
TcpListener tcpListener = new TcpListener(IPAddress.Any, 27015);
tcpListener.Start();
//code to wait for a client to connect, omitted for simplicity
TcpClient connectedClient = tcpListener.AcceptTcpClient();
//#1: retrieve the local endpoint of the client (on the server)
IPEndPoint clientEndPoint = (IPEndPoint)connectedClient.Client.LocalEndPoint;
//#2: get the ip-address of the endpoint (and cast it to string)
string connectedToAddress = clientEndPoint.Address.ToString();
//#3: retrieve the host entry from the dns for the ip address
IPHostEntry hostEntry = Dns.GetHostEntry(connectedToAddress);
//print the fqdn
Console.WriteLine("FQDN: " + hostEntry.HostName);
您可以在一行中写出#1,#2和#3:
Dns.GetHostEntry(((IPEndPoint)connectedClient.Client.LocalEndPoint).Address.ToString()).HostName);