如何从套接字获得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试。它向我显示与上面相同的错误
首先,它看起来像是您想要的本地终点。其次,当您指定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包装器)。
Thx解释。你能把你的前三条线放在一些灯上吗?我不确定你想要解释什么。 **套接字将被绑定到没有特定的接口**接口在这里代表什么 – 2010-06-29 08:23:08
接口参考网络堆栈中的特定组件。您的电脑可以通过多种方式连接到互联网(或本地网络)。你可以有几个连接(有线和无线)。每个活动接口表示这样的连接并具有不同的IP地址。当你输入'netsh interface ipv4 show addresses'时,你会得到所有当前安装的网络接口的列表。一个这样的接口是具有静态IP地址“127.0.0.1”的回送接口。当我说没有特定的接口时,我的意思是可以在任何接口上进行连接。 – 2010-06-30 09:32:23
如果您的计算机是网关或防火墙,您可以通过仅允许在特定接口上进行连接来限制网络任一侧的访问。尽管如此,我认为这与网络分段更相关。 – 2010-06-30 09:37:02
@tanascius:谢谢让我意识到我的错误。我现在格式化了它。 – 2010-06-29 08:18:14
thx,阅读和回答格式良好的问题真的很容易^^ – tanascius 2010-06-29 08:20:24