如何从Socket获取IP地址

我想获得一个绑定到receiveSock的IP地址。 我怎么才能得到它。

问题1:

ipEndReceive = new IPEndPoint(IPAddress.Any, receivePort); receiveSock = new Socket(AddressFamily.InterNetwork , SocketType.Stream, ProtocolType.Tcp); receiveSock.Bind(ipEndReceive); 

当代码达到Bindfunction时。 发生错误

无效参数,错误代码:10022,消息:提供了无效参数

问题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.Any0.0.0.0 )时,您明确声明Socket将绑定到没有特定接口。 每个IP地址只匹配一个接口。

 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 

套接字已绑定,将用于接收连接。 它没有RemoteEndPoint 。 这应该非常清楚,因为Accept方法返回一个新的Socket对象,该对象表示两个端点(本地/远程)之间的连接。

注意:这是一个IPv4套接字( AddressFamily.InterNetwork ),所以不要尝试将其绑定到其他任何东西。

查看MSDN上的文档,您可以在那里了解有关典型Winsock编程的更多信息(因为Socket类只是一个Winsock包装器)。