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

10

我正在使用一个与我的COMM端口通信的程序,但我制作了另一个想要“嗅探”comm端口消息并针对这些消息执行自己操作的程序,是否有可能在.NET c#中实现?

4个回答

6

如果您有兴趣,可以使用第三方库/工具/产品来公开流量。

以下是我用过的一个串口仿真工具 - 但我认为它提供了你可以使用的东西: http://com0com.sourceforge.net/


2
如果您可以控制与您的 COMM 端口通信的第一个程序,为什么不将从端口接收到的数据通过远程或任何其他类型的 IPC 传递给您的第二个程序呢?如果您能编写连接到 COMM 端口的代理程序,并且让另外两个程序通过该代理进行通信,则效果更佳。
另一个想法是,如果您只需要嗅探入站数据,则可以获取 Y-电缆(分配器)并连接到 2 个 COMM 端口,每个程序连接到各自的 COMM 端口。但您需要确保第二个程序没有尝试发送数据。在某些情况下,您可能需要一个仅连接第二输出的 RX 引脚的分配器。如果需要图表,请告诉我。
如果您没有 2 个 COMM 端口,您可以轻松地获得价格不到 10 美元的 USB-串行转换器。

1

可以从串口嗅探流量

但是似乎没有“COMPortSniffer”控件

sysinternals使用的一种有效技术在这里介绍

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


0

这个代码项目(http://www.codeproject.com/Articles/75770/Basic-serial-port-listening-application)有一个非常好的教程。

它展示了如何从串口读取数据,从中你应该能够读取数据。

以下是一个简短的片段:

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));
}

在这种情况下,您必须控制主要消费者源代码以发布读取的数据。它不是嗅探已建立的串行通信。 - sahl04

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