【发布时间】: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