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

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

【问题讨论】:

    标签: c# serial-port listener sniffing


    【解决方案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));
          }
          

          【讨论】:

          • 在这种情况下,您必须控制初级消费者源代码才能发布读取的数据。它没有嗅探已建立的串行通信。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-03-29
          • 1970-01-01
          • 1970-01-01
          • 2017-10-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多