【问题标题】:A C# Socket that gets an IP address automatically自动获取 IP 地址的 C# Socket
【发布时间】:2012-01-02 17:58:30
【问题描述】:

我已经开始使用 C# 进行套接字编程。以前,我有一些在 Java 下使用套接字的经验; C# 一切都很好,除了:

C# 套接字不会自动获取 IP 地址。在Java中,服务器套接字只需要一个端口,然后在构造它们时,会自动获取一个可以由方法返回的可用IP(我不记得那个方法的名字了)。

在 C# 中,必须为服务器套接字指定 IP,否则无法构造。我希望套接字自动找到一个 IP,但我尝试了IPAddress.any,它只返回0.0.0.0,这很奇怪(我什至不知道这意味着什么!监听每个 IP?) 服务器套接字的IP地址可以通过localEndPoint属性返回,所以我只想让套接字获取一个IP,然后我会用那个方法弄清楚它是什么。

这怎么可能?

【问题讨论】:

  • 我很容易出错,但我认为 0.0.0.0 是一个特殊情况,它表示使用任何 IP 地址。我相信在 C++ 中进行套接字编程时也会发生这种情况。
  • @KshitijMehta 你完全正确。这就是它的意思 - 每个可用的 ip。
  • 感谢您的评论,但这仍然不能回答问题。我不希望我的程序使用任何 IP,因为,比如说,我想从远程客户端将套接字连接到该服务器。我应该给这个套接字什么地址? 0.0.0.0??
  • 在 0.0.0.0 上监听意味着 所有 IP 地址,所以是的 - 用于接受远程连接。
  • 但这怎么可能呢?所有IP地址?我说的是通过网络连接!如果此套接字正在侦听所有 IP 地址,那么它应该接受任何请求来自任何地方的连接的套接字!

标签: c# sockets ip


【解决方案1】:

如 cmets 中所述。 0.0.0.0 表示“任何 IP 地址”,这正是您在构造函数中指示的内容。

如果您希望它只侦听特定 IP,则需要在构造函数中明确表示该 IP。它不会随机选择一个,而且您不希望它这样做。

顺便说一下,有一个不同的类用于列出系统上可用的 IP。如果您需要,请在评论中告诉我。

【讨论】:

  • 感谢您的回答,但我应该如何知道哪个 IP 可用?我试过这个,但每次它说“请求的地址在其上下文中无效”,这就是为什么我希望它自动找到可用的 IP。如何解决这个问题?
  • 简单。所有 IP 是指服务器上任何网卡上的所有 IP。套接字不“获取”IP 地址,网卡可以。套接字只能使用服务器网卡上可用的 IP 地址。它永远不会出去抓一个。所有 IP 表示“服务器上的所有内容”,如果管理员的工作是设置,则知道这些内容。
  • 好的。交易是这样的:我在德克萨斯的某个地方有一个客户端程序,我在纽约有一个服务器程序。客户端应该连接到服务器,但它不知道 IP。服务器正在监听 0.0.0.0。我在纽约的朋友告诉我有关服务器的任何信息。我应该给客户端什么IP?
  • 他告诉我除了IP地址之外的任何东西!他可能可以找到它,但他不知道如何找到它。我的意思是,如果你是他,你会如何找到那个特定的 IP 地址?是不是被互联网连接使用的,显示在whatismyip.com上的那个?
  • @Vor73x 这更像是一个网络问题。防火墙/路由器可能会阻塞。
猜你喜欢
  • 2010-09-06
  • 1970-01-01
  • 2010-10-10
  • 2011-10-14
  • 2011-10-02
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多