10

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

4

4 回答 4

5

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

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

于 2008-12-11T01:08:54.073 回答
2

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

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

如果您没有 2 个 COMM,您可以轻松获得一个不到 10 美元的 USB-Serial 转换器。

于 2008-12-11T07:38:43.723 回答
1

可以从串口嗅探流量

但是似乎没有“COMPortSniffer”控件

此处介绍了 sysinternals 使用的有效技术

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

于 2008-12-10T23:56:49.727 回答
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));
}
于 2014-09-03T08:10:02.597 回答