2008-12-10 12 views
9

मैं एक प्रोग्राम का उपयोग कर रहा हूं जो मेरे COMM पोर्ट से बात करता है, लेकिन मैंने एक और प्रोग्राम बनाया है जिसे मैं कम पोर्ट संदेशों को "स्नीफ" करना चाहता हूं और इसके अलावा उन संदेशों के खिलाफ अपने स्वयं के कार्यों को निष्पादित करना चाहता हूं। क्या यह .NET सी # में संभव है?सी # में मैं एक COM (सीरियल) पोर्ट को कैसे सुन सकता हूं जो पहले से ही खुला है?

उत्तर

5

तीसरे पक्ष के पुस्तकालय/उपकरण/उत्पाद हैं जो आपकी रुचि रखने वाले ट्रैफ़िक को उजागर करते हैं।

यहाँ एक मैं सीरियल पोर्ट अनुकरण के लिए इस्तेमाल किया है - लेकिन मैं इसे कुछ आप उपयोग कर सकते हैं प्रदान करता है लगता है: http://com0com.sourceforge.net/

2

यह सीरियल पोर्ट से यातायात सूंघ के लिए संभव है

लेकिन वहाँ does not एक "COMPortSniffer" नियंत्रण

sysinternals द्वारा इस्तेमाल किया एक वैध तकनीक प्रस्तुत किया है there

यह भरोसा करने लगता होने लगते हैं हालांकि, Win32 प्रोग्रामिंग पर, मुझे नहीं लगता कि इस तरह की चीज सीधे सी #

2

आप पहली बार प्रोग्राम है जो आप बंदरगाह कॉम से बातचीत पर नियंत्रण है, तो क्यों कार्यक्रम में परिवर्तन नहीं पोर्ट से प्राप्त डेटा को रिमोटिंग या किसी अन्य प्रकार के आईपीसी के माध्यम से आपके दूसरे कार्यक्रम में पास करने के लिए। बेहतर है कि अगर आप एक प्रॉक्सी प्रोग्राम लिख सकते हैं जो COMM पोर्ट से जुड़ा हुआ है, और संचार के लिए इस प्रॉक्सी से 2 अन्य प्रोग्राम बात करते हैं।

एक और विचार है, अगर आप केवल आने वाले डेटा सूंघ करने की आवश्यकता है कि आप एक वाई केबल (विभाजक) हो जाते हैं और 2 कॉम पोर्ट से कनेक्ट कर सकते हैं,, प्रत्येक कार्यक्रम प्रत्येक कॉम बंदरगाह को जोड़ता है। लेकिन आपको यह सुनिश्चित करने की ज़रूरत है कि दूसरा प्रोग्राम संचारित करने की कोशिश नहीं कर रहा है। कुछ मामलों में आपको एक स्प्लिटर की आवश्यकता हो सकती है जो केवल दूसरे आउटपुट के लिए आरएक्स पिन को जोड़ती है। यदि आपको आरेख की आवश्यकता है तो मुझे बताएं।

यदि आपके पास 2 COMM नहीं है, तो आप आसानी से USD10 से कम के लिए यूएसबी-सीरियल कनवर्टर प्राप्त कर सकते हैं।

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

इस मामले में आप प्राथमिक उपभोक्ता स्रोत कोड के बारे में नियंत्रण पढ़ने डेटा प्रकाशित करने के लिए होना चाहिए। यह एक स्थापित सीरियल संचार स्नीफ नहीं कर रहा है। – sahl04

संबंधित मुद्दे