获取套接字的本地IP地址

本文关键字:IP 地址 套接字 获取 | 更新日期: 2023-09-27 18:27:26

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

获取套接字的本地IP地址

由于绑定到IPAddress.IPv6Any,在第一次I/O操作发生之前,端点信息将不可用。文件上写着:

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

因此,在您的情况下,为了获得有意义的信息,您必须在访问LocalEndPoint之前调用Accept()