【问题标题】:C# simple server for pinging only仅用于 ping 的 C# 简单服务器
【发布时间】:2013-10-11 23:33:26
【问题描述】:

我正在用 C# 编写一个程序,它基本上服务于一个简单的目的。它应该充当客户端 ping 的服务器。此服务器程序仅用于通过返回 ping 请求来确定计算机是否仍在运行。除了响应 ping 请求之外,我不需要程序将任何信息发送回客户端。简单的 ping 响应足以确认运行应用程序的计算机仍在运行。

我目前正在通过使用 TCP 服务器/客户端来解决此问题。但是,我似乎无法连接到 TCP 服务器。这是因为服务器需要打开端口 80 才能被 ping 通吗?我的 TCP 服务器代码基于我发现的这个线程:

Send/Receive Bytes using TCP Sockets over internet (possibly using static IP)

这种方法有什么固有的错误吗?或者有没有更简单的方法来创建这个只需要接受和响应 ping 请求的简单服务器?

【问题讨论】:

  • 您不需要服务器来响应 ping 请求。
  • 我认为计算机需要主动监听 ping 请求才能响应?因为如果我只是简单地 ping 我的计算机的 IP 地址,我没有得到任何响应并且 100% 的数据包数据丢失。是因为防火墙设置或端口吗?
  • 我认为可能是防火墙设置不允许 ping.. 但是您甚至不能 ping 自己计算机的 IP 地址(例如 127.0.0.1)?
  • 你说得对,如果我在同一个系统上 ping 我自己的电脑,我可以。但我似乎无法通过 Internet 或从另一台计算机通过本地网络 ping 它。
  • @Generalkidd - 绝对是防火墙。请参阅here 了解如何使 ping 能够通过。

标签: c# sockets tcp


【解决方案1】:

你在客户端做什么? 在控制台上调用 ping?这不起作用,因为 ping 不是基于 TCP。 如果您正在处理此代码,您的客户端必须连接 TCP 端口 9999 才能获得任何响应 --> 所以您还需要在客户端开发一个特殊的 ping 应用程序。客户端也不能发送任何东西(比如 ping),因为服务器只接受客户端,发送 sth。然后关闭连接。

默认 ping 机制(基于 ICMP)应该已经在您的操作系统中可用,并且足以满足您的用例。它不在那里吗? 这可能与某些以太网设置或防火墙有关。

【讨论】:

  • 好吧,如果我忽略 TCP 并且只使用默认的 ping 机制,那么 ping 请求来自哪个端口?无论是通过 Internet 还是本地网络,我都无法从其他计算机 ping 我的计算机。
  • ping 使用 ICMP 数据包,不使用任何端口号。以下是有关它的更多详细信息:en.wikipedia.org/wiki/Ping_%28networking_utility%29 如果您无法从网络中的另一台 PC ping 它,则很可能是防火墙直接在PC上发布。 ping 没有从 Internet 运行是正常的,因为您的路由器不知道将 ping 数据包发送到哪里,只会丢弃它。
  • 所以,如果我想从互联网上 ping,我需要在 IIS 中设置一个 Web 服务器或类似的东西,以便路由器知道将 ping 请求发送到哪里?
【解决方案2】:

您可以在服务器上的特定端口上打开一个套接字,然后尝试使用您的客户端连接到它,就像您发布的链接中一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 2017-10-15
    • 2020-06-11
    • 2017-03-19
    相关资源
    最近更新 更多