【问题标题】:Getting the IP Address of a Remote Socket Endpoint获取远程套接字端点的 IP 地址
【发布时间】: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。这正常吗?

【问题讨论】:

    标签: c# sockets endpoints


    【解决方案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
        猜你喜欢
        • 2010-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-02
        • 2019-08-28
        • 2016-01-01
        • 2018-04-30
        • 1970-01-01
        相关资源
        最近更新 更多