我正在寻找刚刚创建的套接字的本地IP地址。我需要能够支持具有多个NIC的服务器,并将以后要连接的直接IP地址与请求客户端进行通信。我正在使用以下代码:
Socket rsock = null;
rsock= new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);
rsock.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, 0);
rsock.Bind(new IPEndPoint(IPAddress.IPv6Any, port));
rsock.Listen((int)SocketOptionName.MaxConnections);
在此之后,.LocalEndPoint开始:[::]:PORT。
背景 我需要IP地址的原因是另一个客户端的辅助连接需要返回到该特定服务器。这些服务器可能位于负载均衡器后面,用于初始服务器选择,因此客户端无法根据主机名解析IP地址。
答案 0 :(得分:1)
由于您绑定到IPAddress.IPv6Any
,因此在第一次I / O操作发生之前,端点信息将不可用。 documentation说:
如果您允许系统分配套接字的本地IP地址和 端口号,
LocalEndPoint
属性将在第一个之后设置 I / O操作。对于面向连接的协议,第一个I / O. 操作是调用Connect
或Accept
方法。
因此,在您的情况下,您必须在访问Accept()
之前致电LocalEndPoint
以获取有意义的信息。