我正在尝试获取绑定到receiveSock的IP地址。我怎么能得到它。
问题1:
ipEndReceive = new IPEndPoint(IPAddress.Any, receivePort);
receiveSock = new Socket(AddressFamily.InterNetwork
, SocketType.Stream, ProtocolType.Tcp);
receiveSock.Bind(ipEndReceive);
当代码达到Bind功能时。发生错误
无效参数,错误代码: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时。它显示了与上面相同的错误
答案 0 :(得分:1)
首先,它看起来像是你想要的本地终点。其次,当您指定IPAddress.Any
(0.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包装器)。