如何从Socket获取IP地址

时间:2010-06-29 08:04:51

标签: c# sockets tcp network-programming

我正在尝试获取绑定到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时。它显示了与上面相同的错误

1 个答案:

答案 0 :(得分:1)

首先,它看起来像是你想要的本地终点。其次,当您指定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包装器)。

相关问题