获取socket的本地IP地址

时间:2012-03-12 16:14:25

标签: c# sockets

我正在寻找刚刚创建的套接字的本地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地址。

1 个答案:

答案 0 :(得分:1)

由于您绑定到IPAddress.IPv6Any,因此在第一次I / O操作发生之前,端点信息将不可用。 documentation说:

  

如果您允许系统分配套接字的本地IP地址和   端口号,LocalEndPoint属性将在第一个之后设置   I / O操作。对于面向连接的协议,第一个I / O.   操作是调用ConnectAccept方法。

因此,在您的情况下,您必须在访问Accept()之前致电LocalEndPoint以获取有意义的信息。