【发布时间】:2016-03-09 06:28:18
【问题描述】:
我有一个服务器,用于为我和我的朋友运行游戏服务器,其中一些服务器是“可攻击的”(怪物可以摧毁我们的基地),所以我希望服务器在不关闭时关闭正在使用。然后我想知道是否有一种方法可以检测给定端口上是否有传入信号(尝试连接到服务器),以便可以打开服务器?
原始问题: 有没有办法检测是否有人试图通过 c#(或更适合此操作的其他语言)中的特定端口发送消息(或连接)?
【问题讨论】:
我有一个服务器,用于为我和我的朋友运行游戏服务器,其中一些服务器是“可攻击的”(怪物可以摧毁我们的基地),所以我希望服务器在不关闭时关闭正在使用。然后我想知道是否有一种方法可以检测给定端口上是否有传入信号(尝试连接到服务器),以便可以打开服务器?
原始问题: 有没有办法检测是否有人试图通过 c#(或更适合此操作的其他语言)中的特定端口发送消息(或连接)?
【问题讨论】:
是的,您必须创建一个服务器来侦听该端口。您将面临的问题是您创建的用于检测传入连接的服务器将需要关闭,以便可以打开游戏服务器。它们不能在同一个端口上侦听,除非它们被编码为一起工作,而您的游戏服务器可能不会出现这种情况。
【讨论】:
如果您想查看是否有任何正在使用的连接,您可以尝试列出所有当前的 TCP 连接(假设服务器使用 TCP)并查找特定端口是否有任何活动连接。
Resmon 在他的“网络”标签中执行此操作,因此必须有一种以编程方式访问它的方法。
这里是描述如何获得活动 TCP 连接的答案。
How can I get all the the active TCP connections using .NET Framework (no unmanaged PE import!)?
您可能应该每隔一段时间监视服务器,因为播放器可能会丢失并重新建立连接,因此每 10 秒左右采样一次,如果超过几个采样都没有连接 - 关闭服务器。
【讨论】: