在 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(串行)端口?的主要内容,如果未能解决你的问题,请参考以下文章