在 C# 中,我如何监听已经打开的 COM(串行)端口?

Posted

技术标签:

【中文标题】在 C# 中,我如何监听已经打开的 COM(串行)端口?【英文标题】:In C# how could I listen to a COM (Serial) Port that is already open? 【发布时间】:2010-09-26 08:39:57 【问题描述】:

我正在使用一个与我的 COMM 端口通信的程序,但我已经制作了另一个程序,我想“嗅探”通信端口消息并对这些消息执行它自己的操作。这在 .NET c# 中可行吗?

【问题讨论】:

【参考方案1】:

有第三方库/工具/产品可以公开您感兴趣的流量。

这是我用于串行端口仿真的一个 - 但我认为它提供了一些您可以使用的东西: http://com0com.sourceforge.net/

【讨论】:

【参考方案2】:

如果您可以控制与您的 COMM 端口通信的第一个程序,为什么不更改程序以通过远程或任何其他类型的 IPC 将从端口接收的数据传递给您的第二个程序。如果您可以编写一个连接到 COMM 端口的代理程序,并让其他程序中的 2 个与该代理通信以完成通信,那就更好了。

另一个想法是,如果你只需要嗅探传入的数据,你可以得到一根 Y 型电缆(分路器)并连接到 2 个 COMM 端口,每个程序连接到每个 COMM 端口。但是您需要确保第二个程序没有尝试传输。在某些情况下,您可能需要一个仅连接第二个输出的 RX 引脚的分离器。如果您需要图表,请告诉我。

如果您没有 2 个 COMM,您可以轻松获得一个 USB-Serial 转换器,价格低于 10 美元。

【讨论】:

【参考方案3】:

可以从串口嗅探流量

但是似乎没有“COMPortSniffer”控件

sysinternals 使用的有效技术已提交there

它似乎依赖于 Win32 编程然而,我认为这样的事情是不可能直接用 C# 实现的

【讨论】:

【参考方案4】:

代码项目 (http://www.codeproject.com/Articles/75770/Basic-serial-port-listening-application) 对此有很好的教程。

它展示了如何读取来自串行端口的数据,并且您应该能够从中读取数据。

简短的 sn-p:

void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)

    int dataLength = _serialPort.BytesToRead;
    byte[] data = new byte[dataLength];
    int nbrDataRead = _serialPort.Read(data, 0, dataLength);
    if (nbrDataRead == 0)
        return;

    // Send data to whom ever interested
    if (NewSerialDataRecieved != null)
        NewSerialDataRecieved(this, new SerialDataEventArgs(data));

【讨论】:

在这种情况下,您必须控制初级消费者源代码才能发布读取的数据。它没有嗅探已建立的串行通信。

以上是关于在 C# 中,我如何监听已经打开的 COM(串行)端口?的主要内容,如果未能解决你的问题,请参考以下文章

C# 串行通信 DLL

如何让 C# WebSocketClient 持续监听消息

c#中如何进行com口操作?

C# COM 端口通信 - USB 到串行适配器的错误

如何在 C# 中实现串行端口通信以控制现金存款机 [关闭]

c#如何监听复制(剪切)事件