【问题标题】:TCPListener for multiple ports多个端口的 TCPListener
【发布时间】:2012-08-04 08:42:16
【问题描述】:

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

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

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

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

为任何帮助干杯。

【问题讨论】:

  • 你要求的不是你想要的。所有客户端都应该连接到同一个服务器端口,如果发生断开连接,客户端应该重新连接。应该不需要重新启动任何进程 - 这对于服务进程来说会有些不便:)
  • TCP/IP 不处理消息,只是处理字节流。确实希望从任意点点滴滴中重新组合您的“数据块”。 This 可能会有所帮助。
  • 通常应用程序在端口上侦听连接请求。收到请求后,会打开另一个端口与新客户端进行通信。原来的端口可以继续监听额外的连接请求。根据您的应用程序,您可能希望侦听单个端口号并接受来自客户端的多个连接。每个客户端在连接后都可以识别自己。您的应用程序将管理与您期望的集合相关的重复或缺失客户端的任何问题。
  • 只有1个客户端,将数据输出到不同的端口。这部分我改不了。数据的具体处理方式取决于它到达的端口,因此需要管理多个端口。任何断开连接都是由于客户端的错误,当它重新启动时,它会再次开始向服务器上的相同端口传输数据。
  • 啊,超载问题。 “客户端”和“服务器”似乎同时指代连接的两端。传统上,TCP 服务器侦听连接。在这种情况下,一个“生产者”将数据提供给几个“消费者”。您已选择让生产者成为 TCP 客户端,让消费者成为 TCP 服务器。还是我还在转?

标签: .net multithreading sockets tcplistener


【解决方案1】:

TCPListener 一次只监听一个端口。如果你想监听多个端口,你需要创建那么多的 TCPListener 实例。

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

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

【讨论】:

    【解决方案2】:

    您可以使用 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 个听众,那是合理的。甚至数百个休眠的异步侦听器也应该是合理的。

    【讨论】:

      猜你喜欢
      • 2012-10-28
      • 2021-08-12
      • 1970-01-01
      • 2013-09-06
      • 2020-07-11
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 2012-06-26
      相关资源
      最近更新 更多