C# 通过 TCP 传输字节流

3
我是一名初级工程师,希望能从这里所有经验丰富的人那里获得一些关于如何处理这个问题的建议。
我被分配了一个项目,要创建一个通过TCP进行字节流传输的服务器/客户端应用程序。我们公司处理具有GPS的双向无线电和调度软件,并希望将其制作成一个服务器/客户端应用程序。目前,调度软件可以连接到中央基站,用户必须在那里,但我们希望使该软件可以从远程位置访问(如果基站位于距离调度员所在位置几英里的中继器旁边)。
用户/客户端 ->轮询麦克风的位置 ->服务器 ->基站 ->OTA信号 ->无线电并返回
我一直在研究Windows Communication Foundation,但还有其他方法可以解决这个问题吗?
我将主要使用C# / .NET / Visual Studio 2008。
2个回答

1
我们使用UDP将汽车的GPS更新发送到处理更新的服务器。在这样的应用程序中(通常带宽有限),您可以真正感受到UDP和短暂的TCP连接(如HTTP)之间在从远程主机到服务器获取数据所需时间方面的差异。UDP数据包似乎会立即到达其目的地,而TCP连接的设置非常显眼,通常需要几秒钟才能完成。我喜欢WCF框架,但如果您的应用程序是我一直在使用的那种系统,我怀疑您不会对它感到满意(除非更新之间的时间间隔很长)。
最近,我一直在使用持久的TCP连接(使用原始套接字),这是确保数据包到达其目的地的好方法。虽然我认为要做到这一点的方法是尽可能保持连接打开,并加入重新连接代码以防断开连接。

如果您感兴趣,这里有一个关于使用套接字的主题的链接:https://dev59.com/93A65IYBdhLWcg3w1SRC#3609784 - Pat Daburu
感谢您的回复。如果我想处理多个客户端/连接,这是否也是一个好方法?我尝试在服务器中使用线程,同时不断监听新客户端,但我认为它会在无限循环中锁定。有哪些关于线程的好读物吗? - mastofact
我倾向于认为这是处理多个客户端的好方法。就像你提到的那样,我为每个新连接生成一个线程,尽管我没有看到锁定问题。在另一个线程中,我发布了一些带有注释的示例代码,我认为这是一个合理的服务器起点。该代码不会为每个新连接创建自己的线程,但我的其中一条评论描述了这一点。如果您发现其中任何内容有用,我很乐意回答任何后续问题。幸运的是,有许多关于C#套接字编程的文章... - Pat Daburu
就像这个网站http://www.codeguru.com/csharp/csharp/cs_network/sockets/article.php/c7695一样 - Pat Daburu
我还有一个问题:是否可以在不预定义字节缓冲区的情况下发送字节流?就像我也在使用COM端口/USB端口进行串行通信,有一个“BytesToRead”。是否有类似的东西(可以轻松适应您的示例)来做到这一点?到目前为止,我有15个字节长度,但其中某些帧是可变的。 - mastofact
显示剩余2条评论

0

如果你只想要一个原始的字节流,那么Socket或者稍微封装一些的TcpClient可能是更轻量级的解决方案。

但是如果你想要发送完整的数据结构和“调用函数”,那么WCF似乎是一个不错的选择。

使用WCF,你可以获得接近于调用带有真实对象参数的常规方法的编程体验,但是使用Socket时,你只能发送字节数组,并且需要自己解释结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接