في C # كيف يمكن أن نستمع إلى (المسلسل) منفذ COM مفتوح بالفعل؟

StackOverflow https://stackoverflow.com/questions/358037

سؤال

وأنا باستخدام البرنامج الذي يتحدث إلى بلدي ميناء COMM، ولكن لقد جعلت برنامج آخر أريد أن "شم" الرسائل ميناء بالاتصالات وأداء انها الإجراءات الخاصة ضد تلك الرسائل بالإضافة. هل هذا ممكن في صافي ج #؟

هل كانت مفيدة؟

المحلول

وهناك مكتبات حزب / أدوات / منتجات الثالثة التي تعرض حركة المرور و كنت مهتما.

وهنا هو واحد استعملتها لمضاهاة المنفذ التسلسلي - ولكن أعتقد أنه يقدم شيئا يمكنك استخدامها: http://com0com.sourceforge.net/

نصائح أخرى

إذا كان لديك السيطرة على البرنامج الأول الذي يتحدث إليكم COMM ميناء، لماذا لا تغيير البرنامج لتمرير البيانات الواردة من الميناء إلى برنامج 2ND لك عبر الاتصال عن بعد أو أي نوع آخر من IPC. والأفضل من ذلك إذا كنت تستطيع كتابة برنامج الوكيل الذي موصولة إلى منفذ COMM، ولها 2 من الحديث برنامج آخر لهذا الوكيل للحصول على الاتصال به.

وهناك فكرة أخرى هي، إذا كنت بحاجة إلى شم البيانات الواردة فقط، يمكنك الحصول على Y-كابل (الخائن) والاتصال 2 منفذ COMM، ويربط كل برنامج إلى كل منفذ COMM. ولكن كنت بحاجة للتأكد من أن البرنامج 2ND لا تحاول نقل. في بعض الحالات، قد تحتاج إلى الخائن الذي يربط فقط دبوس RX لإخراج 2ND. اسمحوا لي أن أعرف إذا كنت في حاجة إلى الرسم التخطيطي.

إذا لم يكن لديك 2 COMM، يمكنك بسهولة الحصول على محول-المسلسل USB لأقل من USD10.

ومن الممكن شم المرور من المنفذ التسلسلي

ولكن هناك لا يبدو أن يكون "COMPortSniffer" السيطرة

ويرد

وهناك تقنية صالحة يستخدمها sysinternals على هناك

ويبدو أن تعتمد على البرمجة Win32 ولكن، لا أعتقد أن مثل هذا الشيء ممكن مباشرة مع C #

ومشروع قانون ( HTTP: //www.codeproject. كوم / مقالات / 75770 / الأساسية-المسلسل الميناء الاستماع التطبيق ) الذي يحتوي على برنامج تعليمي كبير في هذا الشأن.

وهذا يظهر كيفية قراءة البيانات القادمة من منفذ تسلسلي، ومنذ ذلك يجب أن تكون قادرة على قراءة البيانات.

ومقتطف قصير:

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));
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top