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

时间:2008-12-10 23:51:09

标签: c# serial-port listener sniffing

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

4 个答案:

答案 0 :(得分:5)

有第三方图书馆/工具/产品可以揭示您感兴趣的流量。

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

答案 1 :(得分:3)

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

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

如果您没有2个COMM,您可以轻松获得低于10美元的USB串行转换器。

答案 2 :(得分:2)

可以从串口嗅探流量

然而,似乎没有“COMPortSniffer”控件

sysinternals使用的有效技术there

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

答案 3 :(得分: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));
}