获取远程套接字端点的 IP 地址
Posted
技术标签:
【中文标题】获取远程套接字端点的 IP 地址【英文标题】:Getting the IP Address of a Remote Socket Endpoint 【发布时间】:2010-12-26 15:00:24 【问题描述】:如何确定已连接套接字的远程 IP 地址?
我有一个可以访问的 RemoteEndPoint 对象以及它的 AddressFamily 成员。
我如何利用这些来查找 IP 地址?
谢谢!
目前正在尝试
IPAddress.Parse( testSocket.Address.Address.ToString() ).ToString();
并为 localhost 端点获取 1.0.0.127 而不是 127.0.0.1。这正常吗?
【问题讨论】:
【参考方案1】:http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.remoteendpoint.aspx
然后您可以调用 IPEndPoint..::.Address 方法来检索远程 IPAddress,并调用 IPEndPoint..::.Port 方法来检索远程端口号。
更多来自链接(修复了很多呵呵):
Socket s;
IPEndPoint remoteIpEndPoint = s.RemoteEndPoint as IPEndPoint;
IPEndPoint localIpEndPoint = s.LocalEndPoint as IPEndPoint;
if (remoteIpEndPoint != null)
// Using the RemoteEndPoint property.
Console.WriteLine("I am connected to " + remoteIpEndPoint.Address + "on port number " + remoteIpEndPoint.Port);
if (localIpEndPoint != null)
// Using the LocalEndPoint property.
Console.WriteLine("My local IpAddress is :" + localIpEndPoint.Address + "I am connected on port number " + localIpEndPoint.Port);
【讨论】:
【参考方案2】:string ip = ((IPEndPoint)(testsocket.RemoteEndPoint)).Address.ToString();
【讨论】:
【参考方案3】:RemoteEndPoint 是一个属性,它的类型是System.Net.EndPoint,它继承自System.Net.IPEndPoint。
如果您查看 IPEndPoint 的 members,您会看到有一个 Address
属性。
【讨论】:
我看到的 RemoteEndPoint 成员可用的只有 AddressFamily。如何访问地址? ((System.Net.IPEndPoint)socket.RemoteEndPoint).Address 谢谢! :) 我正在尝试 string remoteIP = IPAddress.Parse( testSocket.Address.Address.ToString() ).ToString();并为本地主机连接获取“1.0.0.127”而不是“127.0.0.1”。这正常吗? 其实IPEndPoint继承自EndPoint。建议的演员阵容可能会在运行时失败。【参考方案4】:我已经在 VB.NET 中编写了这段代码,但您可以翻译。 好吧,假设您将变量 Client 作为 TcpClient
Dim ClientRemoteIP As String = Client.Client.RemoteEndPoint.ToString.Remove(Client.Client.RemoteEndPoint.ToString.IndexOf(":"))
希望对您有所帮助!干杯。
【讨论】:
您不必执行所有这些字符串函数。直接投射到 IPEndPoint 会快得多 - DirectCast(Client.Client.RemoteEndPoint, IPEndPoint).Address以上是关于获取远程套接字端点的 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章