如何从套接字获得IP地址

如何从套接字获得IP地址

问题描述:

我正在尝试获取绑定到receiveSock的IP地址。我怎么才能得到它。如何从套接字获得IP地址

QUES 1:

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

receiveSock.Bind(ipEndReceive); 

当代码到达绑定函数。发生错误

参数无效,错误代码:10022, 消息:一个无效的参数是 供给

QUES 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

@tanascius:谢谢让我意识到我的错误。我现在格式化了它。 – 2010-06-29 08:18:14

+0

thx,阅读和回答格式良好的问题真的很容易^^ – tanascius 2010-06-29 08:20:24

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

+0

Thx解释。你能把你的前三条线放在一些灯上吗?我不确定你想要解释什么。 **套接字将被绑定到没有特定的接口**接口在这里代表什么 – 2010-06-29 08:23:08

+0

接口参考网络堆栈中的特定组件。您的电脑可以通过多种方式连接到互联网(或本地网络)。你可以有几个连接(有线和无线)。每个活动接口表示这样的连接并具有不同的IP地址。当你输入'netsh interface ipv4 show addresses'时,你会得到所有当前安装的网络接口的列表。一个这样的接口是具有静态IP地址“127.0.0.1”的回送接口。当我说没有特定的接口时,我的意思是可以在任何接口上进行连接。 – 2010-06-30 09:32:23

+0

如果您的计算机是网关或防火墙,您可以通过仅允许在特定接口上进行连接来限制网络任一侧的访问。尽管如此,我认为这与网络分段更相关。 – 2010-06-30 09:37:02