Мой короткий ответ будет простой способ построения полного доменного имени. Это может привести к сбою, если ваш сервер реализует несколько сетевых интерфейсов.
public string FQDN() {
string host = System.Net.Dns.GetHostName();
string domain = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName;
return host + "." + domain;
}
Поскольку вы инициализацией ваш
TCPListener
с
IPAddress.Any
, согласно
MSDN
основной поставщик услуг назначит наиболее подходящий сетевой адрес.
Это означает, что вы должны ждать, пока клиент не подключен, чтобы получить полное доменное имя, как вы не знаете заранее, что сетевой адрес, который вы получите назначены (и еще раз, если ваш сервер реализует несколько сетевых интерфейсов, не знаю, с кем клиент будет подключаться).
три шага будет необходимому для получения полного доменного имени сетевого интерфейса клиент подключен к:
- получить локальную конечную точку клиента (в качестве IPEndPoint)
- получить IP-адрес конечной точки
- получить запись хоста для этого IP-адреса (через Dns.GetHostEntry)
В коде это выглядит следующим образом:
//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);
, что в годовом исчислении означает «я есть сервер», так что ваш локальный? – K3rnel31
вы можете получить IP-адрес из FQDN, но не FDQN из ip-адреса – K3rnel31