Tag: 通信

串行数据的二进制通信协议解析器设计

我正在重新审视字节流的通信协议解析器设计(串行数据,一次接收1个字节)。 数据包结构(不能更改)是: || Start Delimiter (1 byte) | Message ID (1 byte) | Length (1 byte) | Payload (n bytes) | Checksum (1 byte) || 过去,我已经采用程序状态机方法实现了这样的系统。 当每个数据字节到达时,状态机被驱动以查看输入数据一次/一个字节是否适合有效数据包,并且一旦整个数据包被组装,基于消息ID的switch语句执行适当的消息处理程序。 在一些实现中,解析器/状态机/消息处理程序循环位于其自己的线程中,以便不对串行数据接收的事件处理程序造成负担,并且由指示字节已被读取的信号量触发。 我想知道是否有更优雅的解决方案来解决这个常见问题,利用C#和OO设计的一些更现代的语言function。 任何可以解决这个问题的设计模式? 事件驱动vs polled vs组合? 我很想听听你的想法。 谢谢。 Prembo。

如何使用C#与Chrome(Chrome扩展程序)进行通信?

我想创建一个可以在我的C#应用​​程序和扩展之间进行通信的桥。 以下是我真正想要的解释:我创建了一个扩展,它将获取HTML元素的详细信息。 但每次启动Chrome时都会启动。 而不是这样做,有没有什么方法可以发送消息到我的chrome扩展,以获取HTML元素的详细信息,然后将其发送回C#应用程序? 我可以使用’XMLHttpRequest’将信息传递给C#,但问题是,当我的页面加载时它就开始了。 让我向你解释我想要的东西: 当我打开我的chrome时,我的扩展程序将自动启动,并且我的background.cs(背景页面)也会启动。 (这里我想要一些客户端 – 服务器类的通信) 使用我的C#应用​​程序,我将一些数据发送到chrome扩展(例如StartFetchingDocument) 一旦我的扩展获得此消息(即StartFetchingDocument),那么我的扩展应该将contect-sctipt.js注入选定的选项卡。 我知道将数据发送回C#需要的其余部分,但是这里我只是在这一阶段陷入困境 – 如何将数据从C#发送到我的扩展(背景页面)。

在C#中传递应用程序之间的信息

所有。 首先我知道从dll将数据发送回.exe的问题,然而那里的答案给我留下了太多的开放性,因为我没有经历我正在尝试的东西,我觉得有必要提出新的问题。 我有一个很大程度上依赖于SQL的现有C#[ All WinForms here ]应用程序。 我们已被要求(由客户端)提供可用于开发和测试SQL的SQL编辑器和库,但也可用于直接粘贴回主应用程序。 新的SQLEditor是一个解析和执行TSQL的multithreading应用程序。 我现在有一些事情需要考虑; 从主应用程序启动第二个应用程序的最佳方法是什么:: 将第二个应用程序转换为DLL并加载到主项目中,将第二个应用程序作为新表单调用( SqlEditor sqlEd = new SqlEditor()等)? 在线程轰炸方面有什么含义,我需要[STAThread] – 因为我希望两个multithreading应用程序同时可用并处于活动状态。 从主应用程序作为单独的.exe启动? 取决于你的建议; 在上述任何一种情况下 – 我可以将信息从第二个应用程序中的单击事件传递回主应用程序的最佳方式是什么,同时它们仍在运行和活动[WCF, ApplicationDomains等]? 观察者设计模式会在这里发挥作用吗? 为了使这个问题更具吸引力,这里是SQL编辑器: 我计划有一个按钮,将选定的SQL粘贴回主应用程序。 我也知道这里有多个问题 – 我为此道歉。 非常感谢你花时间陪伴。

在WCF中具有“无法识别的序列”消息的CommunicationException

我在使用WCF服务时遇到了CommunicationException。 消息是: 远程端点不再识别此序列。 这很可能是由于远程端点中止。 wsrm:Identifier的值不是已知的Sequence标识符。 可靠的会议出了问题。 调用契约方法后,会抛出exception。 在调用contract方法之前,通道状态为Opened。 我捕获此exception后恢复我的服务客户端,并且一段时间它工作正常。 但是这个错误再次发生。 似乎超出了一些超时,但我无法理解究竟是哪一个。 我使用带有reliableSession的wsHttpBinding。 InactivityTimeout设置为半小时,我确信它没有被超过,因为exception被抛出更早。

在同一台计算机上的.net应用程序之间传输大数据

我有两个在同一台机器上运行的.net应用程序。 第一个应用是’引擎’。 它构建图像 – 图像的大小约为4M。 第二个应用程序是“查看器”。 它显示了“引擎”发送的图像。 引擎每10-15秒发送一次图像。 我的问题是将图像从引擎传递给观看者的麻烦方法是什么。 目前,我正在使用FileSystem。 引擎将映像写入文件系统文件夹,并使用FileSystemWatcher将查看器获取此文件。 那方法好吗? 这可靠吗?

在C#中进行进程间通信的最简单方法是什么?

我有两个C#应用程序,我希望其中一个发送两个整数到另一个(这不一定很快,因为它每隔几秒只调用一次)。 最简单的方法是什么? (它不一定是最优雅的。)

GUI和Windows服务通信

我知道自Vista以来,C#无法直接将UI表单挂钩到Windows服务。 这是在Microsoft网站上说明的。 我在这方面的问题是:“从用户界面到服务的最佳通信方式是什么?” 我听说过远程处理,Web服务和直接TCP。 还有其他方法吗? 他们如何与前面提到的方法进行排名? 他们实施起来有多复杂? 我的应用程序是用于Intranet,而不是Internet。 微软平台将是双方的,因此互操作性不是一个因素,但速度是。 我的意思是我想要在网络上获得最小的数据包。 TIA