0

我需要一些关于以下问题的指示(工作示例会很棒)。我是套接字编程的新手,虽然不是 .net,但不介意 VB 或 c# 中是否有任何帮助。

我有一个“客户端”系统,它每隔几秒(比如说 10 秒)就会吐出规则的数据块(实际上是 ascii)。数据将很小,可能小于 1K,并且我可以让每个输出由特定序列(例如<EoM>)分隔。这个“客户端”将输出到几个(多于 1 个,少于 5 个)不同的端口。

我需要编写一个服务器,它将打开所需数量的端口,监听它们是否有数据到达。当消息到达其中一个端口时,<EoM>最后带有分隔符,我希望能够获取该数据并对其进行一些处理(解析它并输入数据库以获取信息)。并继续监听下一条数据到达。这需要对所有定义的端口进行。如果客户端应该断开连接,我希望端口能够等待并监听重新连接,然后像以前一样继续处理。但是作为将要进行通信的单个客户端,我可以假设如果 1 个端口断开连接,如果这比断开连接后再次侦听更容易,则可以重新启动服务器进程。

很抱歉,就像我说的那样,我对套接字编程很陌生,所以对于如何做到这一点的任何实际示例,我们将不胜感激。理想情况下,最终结果将是一个 Windows 服务,但我想将它作为一个表单应用程序启动,直到我完成所有工作以便于调试。

为任何帮助而欢呼。

4

2 回答 2

1

TCPListener一次只监听一个端口。如果要侦听多个端口,则需要创建许多 TCPListener 实例。

由于您希望每个端口上的侦听器执行不同的操作,因此您需要在每个端口上接受一个客户端,并处理您在那里接收的数据。

上面的链接提供了一个关于如何接受客户端和监听数据的基本初学者示例。尽管异步方法的性能要好得多,但此同步代码更简单,可以让您轻松上手。

于 2012-08-07T12:28:45.897 回答
0

您可以使用 TAP/TUN 驱动程序来安装您自己的网络接口(Windows 和 Linux),让您可以访问原始以太网帧。这样您就可以对帧执行自己的过滤,找到相关的 IP 和端口,并转发到您自己的 TCP/IP 软件堆栈进行服务。

虽然这可行,但也有缺点:

  1. TAP/TUN 驱动程序往往为 10Mbps
  2. 较低级别数据包的用户模式处理是 CPU 密集型的,有时会丢弃数据包
  3. 必须构建或使用 TCP/IP 库将帧消化成 TCP 协议,包括维护 TCP 会话状态。

TAP/TUN 非常适合安全筛选和 UDP 壮举,但 TCP/IP 是另一个级别。

尽管这是一个可行的答案,但我会推荐@nunespascal 的答案。异步编程并没有那么难,如果你只是在说大约 5 个听众,那是合理的。即使是数百个休眠的异步侦听器也应该是合理的。

于 2016-06-02T12:25:08.163 回答