C# 你能从 System.Net.Sockets.TcpClient 中检索主机名和端口吗?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/409906/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-04 02:16:30  来源:igfitidea点击:

Can you retrieve the hostname and port from a System.Net.Sockets.TcpClient?

c#networking

提问by Samir Talwar

Is it possible to retrieve the underlying hostname/port from a new TcpClient?

是否可以从新的 TcpClient 检索底层主机名/端口?

TcpListener listener = new TcpListener(IPAddress.Any, port);
TcpClient client = listener.AcceptTcpClient();
// get the hostname
// get the port

I've routed around in client.Client(a System.Net.Socket), but can't find anything out in there either. Any ideas?

我在client.Client(a System.Net.Socket)中转了一圈,但在那里也找不到任何东西。有任何想法吗?

Thanks all.

谢谢大家。

采纳答案by Rasmus Faber

Untested, but I would try the following:

未经测试,但我会尝试以下操作:

TcpListener listener = new TcpListener(IPAddress.Any, port);
TcpClient client = listener.AcceptTcpClient();

IPEndPoint endPoint = (IPEndPoint) client.Client.RemoteEndPoint;
// .. or LocalEndPoint - depending on which end you want to identify

IPAddress ipAddress = endPoint.Address;

// get the hostname
IPHostEntry hostEntry = Dns.GetHostEntry(ipAddress);
string hostName = hostEntry.HostName;

// get the port
int port = endPoint.Port;

If you can make do with the IPAddress, I would skip the reverse DNS-lookup, but you specifically asked for a hostname.

如果您可以使用 IPAddress,我会跳过反向 DNS 查找,但您特别要求提供主机名。