2012-01-27 14 views
10

के लिए AF_UNIX समकक्ष मैं विंडोज़ पर यूनिक्स डोमेन सॉकेट की तरह व्यवहार करने वाला कुछ उपयोग करना चाहता हूं।विंडोज़

व्यवहार यह है: एक प्रक्रिया एक "सर्वर" होगी और अन्य प्रक्रियाओं से कनेक्शन प्राप्त करेगी और यह टीसीपी सॉकेट के रूप में विभिन्न प्रक्रियाओं से कनेक्शन रख और उपयोग कर सकती है।

आईपी सॉकेट समाधान नहीं है, क्योंकि इसे बंदरगाह चुनने की आवश्यकता है, अन्य अनुप्रयोगों की प्रक्रियाओं को चयनित बंदरगाह की आवश्यकता हो सकती है, और नेटवर्क में खुला बंदरगाह देखा जा सकता है।
मुझे नहीं पता कि नामित पाइप कई क्लाइंट प्राप्त कर सकते हैं और रख सकते हैं, लेकिन मुझे नहीं पता कि विभिन्न ग्राहकों को अलग कैसे किया जाए। और यह चयन जैसे कुछ कनेक्शन के साथ एकाधिक कनेक्शन से डेटा का इंतजार करने का एक तरीका प्रदान नहीं करता है।

नामित पाइप का उपयोग करने के बारे में एक पुराना सवाल कहता है, लेकिन यह वांछित व्यवहार प्राप्त करने के लिए नामित पाइप का उपयोग करने का तरीका नहीं बताता है। AF_UNIX in windows
मुझे नहीं पता था कि एक विशिष्ट ग्राहक के हैंडल कैसे प्राप्त करें।

उत्तर

1

मुझे जवाब मिला है।

बड़ा अंतर यह है कि एक कनेक्शन की प्रतीक्षा करने वाला हैंडल वही है जो किसी ग्राहक को संचार करता है। मुझे अगले क्लाइंट की प्रतीक्षा करने के लिए सर्वर के लिए एक नया नामित पाइप बनाना होगा।

संदर्भ:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365799%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365588%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365603%28v=vs.85%29.aspx

1

संभवतः वह उत्तर नहीं जिसे आप सुनना चाहते हैं, लेकिन COM विंडोज़ में इंटर-प्रोसेस संचार प्राप्त करने के लिए कई मानक तंत्रों में से एक है। इसमें ऐसे मुद्दे हैं जो डेवलपर्स को परेशान करते हैं - लेकिन यह आपके द्वारा सूचीबद्ध सभी आवश्यकताओं के लिए काफी अच्छा काम करता है।

आईपी सॉकेट के लिए, आपने "नेटवर्क में देखा जा सकता है" के मुद्दे का उल्लेख किया। यह मामला नहीं है यदि आप बस अपने सर्वर सॉकेट को स्थानीयहोस्ट पते (127.0.0.1) पर बाध्य करते हैं।

SOCKET s; 
const DWORD LOCAL_HOST_IP = 0x7f000001; // 127.0.0.1 
sockaddr_in addrLocal = {}; 

s = socket(AF_INET, SOCK_STREAM, 0); 
addrLocal.sin_family = AF_INET; 
addrLocal.sin_port = htons(YOUR_APPLICATION_PORT); 
addrLocal.sin_addr.s_addr = htonl(LOCAL_HOST_IP); 
s = SOCKET(AF_INET, SOCK_STREAM, 0); 
bind(s, (sockadr*)&addrLocal, sizeof(addrLocal)); 
0

विंडोज हाल ही में किया गया है (विंडोज 10 अंदरूनी 17063 निर्माण), AF_UNIX के लिए समर्थन लागू किया ताकि आप बनाता है भविष्य खिड़कियों में इसका इस्तेमाल कर सकते हैं।

हालांकि यह सब लागू नहीं किया गया है, नीचे दी गई विशेषताएं काम नहीं करती हैं।

  • AF_UNIX आंकड़ारेख (SOCK_DGRAM) या अनुक्रम पैकेट (SOCK_SEQPACKET) सॉकेट प्रकार।
  • अनुपूरक डेटा: लिनक्स का यूनिक्स सॉकेट कार्यान्वयन सॉकेट पर फ़ाइल डिस्क्रिप्टर (SCM_RIGHTS) या प्रमाण-पत्र ('SCM_CREDENTIALS`) पास करने जैसे सहायक डेटा को पास करने का समर्थन करता है। विंडोज यूनिक्स सॉकेट कार्यान्वयन में सहायक डेटा के लिए का कोई समर्थन नहीं है।
  • ऑटोबिंड सुविधा (विवरण के लिए 'sockaddr_un' पर अनुभाग देखें)।
  • सॉकेटपेयर: सॉकेटपायर सॉकेट एपीआई विंसॉक 2.0 में समर्थित नहीं है।

स्रोत: https://blogs.msdn.microsoft.com/commandline/2017/12/19/af_unix-comes-to-windows/