tags:

views:

535

answers:

1

Is it possible to retrieve the underlying hostname/port from a new 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?

Thanks all.

+5  A: 

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.

Rasmus Faber