In C# how could I listen to a COM (Serial) Port that is already open?

[亡魂溺海] 提交于 2019-11-26 18:28:44

问题


I am using a program that talks to my COMM port, but I have made another program that I want to "sniff" the comm port messages and perform it's own actions against those messages in addition. Is this possible in .NET c#?


回答1:


There are third party libraries/tools/products that expose the traffic f you are interested.

Here is one I used for serial port emulation - but I think it provides something you can use: http://com0com.sourceforge.net/




回答2:


If you have control over the first program that talks to you COMM port, why not change the program to pass data received from the port to the 2nd program of yours via remoting or any other type of IPC. Better still if you can write a proxy program that connected to the COMM port, and have 2 of the other program talk to this proxy to get the communication done.

Another idea is, if you need to sniff only incoming data, you can get a Y-cable (splitter) and connect to 2 COMM port, each program connects to each COMM port. But you need to make sure the 2nd program is not trying to transmit. In some cases you might need a splitter which only connects the RX pin for the 2nd output. Let me know if you need the diagram.

If you don't have 2 COMM, you can easily get a USB-Serial Converter for less than USD10.




回答3:


It is possible to sniff traffic from the serial port

However there doesnt seem to be a "COMPortSniffer" Control

A valid technique used by sysinternals is presented there

It seems to rely on Win32 programming however, I dont think such a thing is possible directly with C#




回答4:


the code project (http://www.codeproject.com/Articles/75770/Basic-serial-port-listening-application) that has a great tutorial on this.

It shows how to read data coming in from a serial port, and from that you should be able to read the data.

A short snippet:

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


来源:https://stackoverflow.com/questions/358037/in-c-sharp-how-could-i-listen-to-a-com-serial-port-that-is-already-open

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!