हम एक सीरियल पोर्ट के माध्यम से दो हाइपर-वी वीएम कनेक्ट करने की कोशिश कर रहे हैं। हाइपर-वी सीरियल पोर्ट को मेजबान सिस्टम में नामित पाइप के रूप में उजागर करता है, और नामित पाइप के सर्वर के अंत को लागू करता है। नतीजतन, उन्हें जोड़ने के लिए, हमें एक नामित पाइप क्लाइंट लिखना होगा जो दोनों वीएम से जुड़ता है, और डेटा को आगे और आगे कॉपी करता है।हाइपर-वी: नामित पाइप के माध्यम से कनेक्टिंग वीएम डेटा खो देता है
We have written such an application। दुर्भाग्य से, यह एप्लिकेशन डेटा खो देता है।
यदि हम दो हाइपरटेरम कनेक्ट करते हैं, और उन्हें डेटा का आदान-प्रदान करते हैं, तो ट्रांसमिशन कभी-कभी सफल होता है, लेकिन कई मामलों में, प्राप्त करने वाली अंत त्रुटियों की रिपोर्ट करता है, या ट्रांसमिशन सिर्फ डेडलॉक्स। इसी तरह, अगर हम कर्नेल डीबगर चलाने के लिए लिंक का उपयोग करते हैं, तो यह अक्सर लटका लगता है।
डेटा हानि का कारण क्या हो सकता है? नामित पाइप को इस तरह से कनेक्ट करते समय क्या सावधानी बरतनी चाहिए?
संपादित: हम समस्या को हल काम किया है kdsrv.exe का उपयोग कर। डिबगी के COM पोर्ट को एक नामित पाइप के माध्यम से उजागर किया जा रहा है, हालांकि, डिबगर अंत टीसीपी के माध्यम से केडीएसआरवी से बातचीत करता है।
सुझाव के लिए धन्यवाद। अग्रेषण को थ्रॉटलिंग थोड़ा सा मदद करता है; एक सादा "कॉपी foo.txt COM1:" अब सभी डेटा सफलतापूर्वक प्रेषित कर सकता है। दुर्भाग्य से, हाइपरटर्म अभी भी zmodem संचार में deadlocks, तो अभी भी डेटा हानि कहीं भी होना चाहिए। ResetEvent के लिए: जहां विशेष रूप से यह गायब है? Async IO को ReadFile और WriteFile में ईवेंट को ठीक से रीसेट करने के लिए परिभाषित किया गया है। कल रीसेट = 0 परीक्षण करेंगे। –
मेरी गलती। ResetEvent की कोई आवश्यकता नहीं है। – John
यह उत्तर केवल आंशिक रूप से समस्या को हल नहीं करता है। फिर भी, यह हमारे पास सबसे अच्छा जवाब है, इसलिए मैं इसे बक्षीस दे रहा हूं। इस समस्या के आसपास हमने कैसे काम किया है इसके लिए मेरा संपादन देखें। –