我正在尝试获取绑定(bind)到 receiveSock 的 IP 地址。我怎样才能得到它。
问题 1:
ipEndReceive = new IPEndPoint(IPAddress.Any, receivePort);
receiveSock = new Socket(AddressFamily.InterNetwork
, SocketType.Stream, ProtocolType.Tcp);
receiveSock.Bind(ipEndReceive);
当代码到达绑定(bind)函数时。发生错误
Invalid Argument, Error Code: 10022, Message : An invalid argument was supplied
问题 2:
ipEndReceive = new IPEndPoint(IPAddress.Parse("127.0.0.1"), receivePort);
receiveSock = new Socket(AddressFamily.InterNetwork
, SocketType.Stream, ProtocolType.Tcp);
receiveSock.Bind(ipEndReceive);
ErrorLog.WritetoErrorlog("\nRemote IP Address : " + ((IPEndPoint)receiveSock.RemoteEndPoint).Address.ToString()
当我尝试使用此 Ip 时。它向我显示与上面相同的错误
最佳答案
首先,它看起来像是您想要的本地端点。其次,当您指定 IPAddress.Any
(0.0.0.0
) 时,您明确声明 Socket
不绑定(bind)到任何特定接口(interface)。每个 IP 地址只匹配一个接口(interface)。
var s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Bind(new IPEndPoint(IPAddress.Any, somePort));
Trace.WriteLine(s.LocalEndPoint); // should be what you're looking for
套接字已绑定(bind)并将用于接收连接。它没有 RemoteEndPoint
。这应该非常清楚,因为 Accept
方法返回一个新的 Socket
对象,表示两个端点(本地/远程)之间的连接。
注意:这是一个 IPv4 套接字 (AddressFamily.InterNetwork
),所以不要尝试将它绑定(bind)到任何其他东西。
查看 MSDN 上的文档,您可以在此处了解有关典型 Winsock 编程的更多信息(因为 Socket 类只是 Winsock 包装器)。
关于c# - 如何从 Socket 获取 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3138885/