You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在已实例化并开启的出站System.Net.WebSockets.WebSocket获取端点信息?

ClientWebSocket实例的套接字信息获取可行性

对于已实例化并完全开启的出站System.Net.WebSockets.ClientWebSocket实例,无法通过公开API直接获取你提到的套接字信息,但可以通过反射访问内部底层套接字来实现,以下是对应项的具体说明:

  • 套接字的本地IP与本地临时端口:
    可以通过反射获取ClientWebSocket内部的底层Socket实例,再通过Socket.LocalEndPoint属性获取包含本地IP和端口的IPEndPoint对象。示例代码如下:

    using System.Reflection;
    using System.Net.WebSockets;
    using System.Net.Sockets;
    
    // 假设clientWebSocket是已连接的实例
    FieldInfo socketField = typeof(ClientWebSocket).GetField("_socket", BindingFlags.NonPublic | BindingFlags.Instance);
    Socket underlyingSocket = socketField.GetValue(clientWebSocket) as Socket;
    if (underlyingSocket != null && underlyingSocket.Connected)
    {
        IPEndPoint localEndPoint = underlyingSocket.LocalEndPoint as IPEndPoint;
        string localIp = localEndPoint.Address.ToString();
        int localPort = localEndPoint.Port;
        // 使用获取到的本地IP和端口
    }
    

    注意:不同.NET版本的内部字段名可能有变化(例如部分版本可能是m_Socket),反射方式存在版本兼容性风险。

  • 远程IP与远程端口:
    同样通过反射获取底层Socket后,使用Socket.RemoteEndPoint属性即可获取远程IP和端口,即使连接时使用的是主机名,这里也会返回解析后的IP地址。示例代码如下:

    if (underlyingSocket != null && underlyingSocket.Connected)
    {
        IPEndPoint remoteEndPoint = underlyingSocket.RemoteEndPoint as IPEndPoint;
        string remoteIp = remoteEndPoint.Address.ToString();
        int remotePort = remoteEndPoint.Port;
        // 使用获取到的远程IP和端口
    }
    

提示:反射方式依赖.NET的内部实现细节,若需要更稳定的方案,建议在建立WebSocket连接前,通过自定义逻辑或使用底层Socket手动建立连接后再封装为WebSocket,但这会增加实现复杂度。

内容的提问来源于stack exchange,提问作者James Harcourt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 10:02:14