c# - 如何从 Socket 获取 IP 地址

标签 c# sockets tcp network-programming

我正在尝试获取绑定(bind)到 receiveSock 的 IP 地址。我怎样才能得到它。

问题 1:

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

receiveSock.Bind(ipEndReceive);

当代码到达绑定(bind)函数时。发生错误

Invalid Argument, Error Code: 10022, Message : An invalid argument was supplied

问题 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 不绑定(bind)到任何特定接口(interface)。每个 IP 地址只匹配一个接口(interface)。

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

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

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

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

关于c# - 如何从 Socket 获取 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3138885/

相关文章:

c# - Windows 8 Developer Preview 中缺少 Type.GetProperty() 方法

c# - 使用 knockout.js 渲染部分 View

java - 通过对等方调用 SOAP 网络服务重置连接

安卓蓝牙连接问题

python - TCP打洞的问题

http - Golang 如何使用 keepalive 处理优雅关机

c# - c# 中的 "operator true"是否正好有两个可以使用的地方?

c# - Xamarin 表单 - 自定义 JSON 的可观察集合

c++ - 利用 poll() 函数(用户空间)的其他方法?

Python TCP 套接字数据有时会丢失部分。套接字溢出?