通过TCP的C#字节流

通过TCP的C#字节流,c#,tcp,network-programming,client-server,C#,Tcp,Network Programming,Client Server,我是一名Jr工程师,希望从这里所有有经验的人那里寻求一些关于如何处理这个问题的建议 我被分配了一个项目来创建一个通过TCP进行字节流传输的服务器/客户端应用程序。我们公司经营带有GPS和调度软件的双向无线电,我们想用它制作一个服务器/客户端应用程序。目前,调度软件可以连接到用户必须在的中央基站,但我们希望能够从远程位置访问该软件(如果基站位于距离调度器所在位置几英里远的中继器处) 用户/客户端->轮询麦克风的位置->服务器->基站->OTA信号->无线电和返回 我一直在看Windows通信基金会

我是一名Jr工程师,希望从这里所有有经验的人那里寻求一些关于如何处理这个问题的建议

我被分配了一个项目来创建一个通过TCP进行字节流传输的服务器/客户端应用程序。我们公司经营带有GPS和调度软件的双向无线电,我们想用它制作一个服务器/客户端应用程序。目前,调度软件可以连接到用户必须在的中央基站,但我们希望能够从远程位置访问该软件(如果基站位于距离调度器所在位置几英里远的中继器处)

用户/客户端->轮询麦克风的位置->服务器->基站->OTA信号->无线电和返回

我一直在看Windows通信基金会,但是我能用什么其他方式来处理这个问题?


我将主要使用C#/.NET/visualstudio 2008

如果您只需要一个原始字节流,那么a或稍微封装一些的可能是一个更轻量级的解决方案

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


使用WCF,您几乎可以调用以真实对象为参数的常规方法,但使用
套接字,您只需发送字节数组,需要自己解释结果。

我们使用UDP将GPS更新从汽车发送到处理更新的服务器。在这样的应用程序中(通常带宽有限),您可以真正区分UDP连接和瞬时TCP连接(如HTTP)之间的差异(从远程主机到服务器的数据获取时间)。UDP数据包似乎会在瞬间到达目的地,TCP连接的设置非常明显,通常需要几秒钟才能完成。我喜欢WCF框架,但如果你的应用程序是我一直在使用的那种系统,我怀疑你会对它感到满意(……除非更新间隔很长)


最近,我一直在使用持久TCP连接(使用原始套接字),如果您想确保数据包到达目的地,这是一种很好的方法。尽管我认为,实现这一点的方法是尽可能长时间地保持连接打开,并在连接中断时合并代码以重新连接

如果你感兴趣,这里有一个链接到另一篇关于使用套接字的帖子:谢谢你的回复。如果我想同时处理多个客户机/连接,这也是一个好方法吗?我尝试在服务器中使用线程,同时一直在侦听新客户机,但我认为它锁定在无限while循环中。线程上有什么好的读取方法吗?我倾向于认为这是处理多个客户端的好方法。正如您提到的,我为每个新连接生成了一个线程,尽管我还没有看到锁定问题。在另一个线程中,我发布了一些带有注释的示例代码,我认为这是服务器上一个合理的良好开端。虽然我的一条注释描述了这一点,但该代码并没有在自己的线程中创建每个新连接。如果你觉得这些有用,我很乐意回答你接下来的问题。幸运的是,有很多关于C#……中套接字编程的文章……像这篇文章一样,我还有一个问题:是否可以在不预先定义字节缓冲区的情况下发送字节流?比如,我也使用COM端口/USB端口进行串行通信,并且有一个“BytesToRead”。是否有类似的东西(可以很容易地适用于您的示例)可以做到这一点?到目前为止,我有一个15字节的长度,但其中有些帧是可变的。