2011-01-09 30 views
19

मैं सी ++ यूनिक्स शैली में एक सर्वर लिखने की कोशिश कर रहा हूँ, लेकिन मैं एक Windows मशीन पर अटक कर रहा हूँ। मैंने मिनजीडब्ल्यू के साथ शुरुआत की, लेकिन यह सही संकलित नहीं हुआ और मुझे बताया कि यह "sys/socket.h" फ़ाइल नहीं ढूंढ सका। जो भी, सर्वर के लिए भी काम करने के लिए जरूरी है। मैं इसके लिए खोज कर गया, और मुझे लगता है कि कहीं कहीं सिगविन स्थापित करने के लिए कहा जाता है, क्योंकि यह कई पुस्तकालयों के साथ आता है। ठीक है, तो मैंने इसे स्थापित किया। हर एक पुस्तकालय यह संभवतः मुझे पेशकश कर सकता है। तब मैं फिर से संकलित करने गया, और यह अभी भी इसे नहीं मिल सकता है। मैं प्रविष्टि के माध्यम से खोज गया फ़ोल्डर शामिल है, और फ़ाइल नहीं मिल सका। तो मैं थोड़ी गड़बड़ी कर रहा था (अतिरिक्त कार्यक्षमता के लिए नाली के नीचे 3 घंटे मुझे जरूरत नहीं है), लेकिन मैंने खोज जारी रखी। मेरे द्वारा इसे कहीं भी ढूंढा जा सकता है। मुझे इसका उपयोग करने के लिए कई संदर्भ मिलते हैं, लेकिन मुझे इसे डाउनलोड करने के लिए कहीं भी नहीं मिल रहा है। मैं अब पिछले कुछ घंटों के लिए खोज कर रहा है, और मैं सब कुछ के साथ बहुत निराश हो गया है क्योंकि वहाँ जहाँ मैं इसे प्राप्त कर सकते हैं (और मैं अगर मैं सही याद विनसॉक उपयोग नहीं होगा। संगतता टूट जाता है यही कारण है कि) के लिए कोई संदर्भ हैं।किसी को "sys/socket.h" हेडर/स्रोत फ़ाइल कहां मिलती है?

तो, लम्बी कहानी संक्षेप में, जहाँ मैं 'socket.h'/'socket.c'/'socket.cpp' फ़ाइलों को डाउनलोड कर सकते हैं? यह मेरा जीवन बनायेगा (और मुझे यकीन है कि कई अन्य लोगों के जीवन) बहुत आसान है, और मैं वास्तव में इसकी सराहना करता हूं!

+1

सिगविन में अधिकांश पॉज़िक्स शीर्षलेख हैं, जिनमें sys/socket.h शामिल हैं। यह अजीब बात है कि आपको यह नहीं मिला। मेरी सिग्विन स्थापना निश्चित रूप से यह है। –

+1

@ सर्गी, उसने सिग्विन के माध्यम से इसे इंस्टॉल किए बिना सीधे मिनीजीडब्ल्यू स्थापित किया हो सकता है। –

+0

क्या आपको इसकी आवश्यकता है? विंडोज़ लगभग एक समान एपीआई को परिभाषित करता है जिसका आप उपयोग कर सकते हैं। और यदि आपको क्रॉस प्लेटफ़ॉर्म पोर्टेबिलिटी की आवश्यकता है, तो Boost.Asio या ACE जैसे पुस्तकालय बेहतर विकल्प हो सकते हैं। – jalf

उत्तर

10

जब से तुम सवाल सी ++ लेबल है, तो आप boost::asio, ACE, या सी ++ के लिए या सी के लिए कुछ अन्य पार मंच सॉकेट पुस्तकालय कुछ अन्य पार मंच पुस्तकालयों के जवाब में पाया जा सकता का उपयोग करने में रुचि हो सकती है C++ sockets library for cross-platform और Cross platform Networking API

यह मानते हुए कि एक तीसरी पार्टी के पार मंच सॉकेट लाइब्रेरी का उपयोग कर आप के लिए एक विकल्प नहीं है ...

हैडर <sys/socket.h> IEEE Std में परिभाषित किया गया है। 1003.1 (POSIX), लेकिन दुख की बात है कि विंडोज POSIX मानक के साथ अनुपालन नहीं है। मिनीजीडब्लू कंपाइलर विंडोज अनुप्रयोगों को संकलित करने के लिए जीसीसी का एक बंदरगाह है, और इसलिए इन पॉज़िक्स सिस्टम हेडर शामिल नहीं हैं। आप Cygwin का उपयोग कर जीसीसी स्थापित है, तो यह विंडोज पर एक POSIX पर्यावरण अनुकरण करने के लिए इन प्रणाली हेडर शामिल होंगे। इसलिए सावधान रहें, हालांकि, कि अगर आप सॉकेट जहां अपने आवेदन में यह और ख पढ़ सकते हैं कि एक।) यदि आप एक ही स्थान पर cygwin DLL डाल करने की आवश्यकता होगी के लिए Cygwin का उपयोग करें।) Cygwin हेडर और Windows हेडर बहुत अच्छी तरह से बातचीत नहीं है (यदि आप windows.h सहित पर योजना, तो आप शायद नहीं sys/socket.h सहित करने के लिए) चाहते हैं।

मेरी व्यक्तिगत सिफारिश VirtualBox, download a copy of Ubuntu की एक प्रति डाउनलोड करने के लिए होगी, उबंटू वर्चुअलबॉक्स में स्थापित करें, और उसके बाद उबंटू पर अपना कोडिंग और परीक्षण करें। वैकल्पिक रूप से, मुझे बताया गया है कि माइक्रोसॉफ्ट एक "यूनिक्स उपप्रणाली" बेचता है और यह विंडोज के कुछ उच्च अंत संस्करणों पर पूर्व-स्थापित है, हालांकि मुझे नहीं पता कि यह प्रणाली कितनी अनुपालनशील है (और, यदि यह अनुपालन है, तो कौन सा संस्करण यूनिक्स मानक का यह अनुपालन है)। Winsockets भी एक विकल्प हैं, हालांकि वे अपने POSIX समकक्षों की तुलना में संक्षेप में विभिन्न तरीकों से व्यवहार कर सकते हैं, भले ही हस्ताक्षर समान हो।

+2

जिस उपप्रणाली का आप उल्लेख कर रहे हैं उसे [इंटरिक्स] कहा जाता है (http://en.wikipedia.org/wiki/Interix) +1 –

+1

@ बिलीओनेल, विकी पेज से पता चलता है कि, * माइक्रोसॉफ्ट ने 2011 में घोषणा की कि इंटरिक्स नहीं होगा विंडोज 8 के बाद विंडोज संस्करणों में शामिल है और ग्राहकों को अपने अनुप्रयोगों को वैकल्पिक समाधान में माइग्रेट करना प्रारंभ करना चाहिए। * – iammilind

+0

@iammilind उस टिप्पणी की तारीख के बारे में कुछ भी नोटिस? :) –

27

को देखते हुए विंडोज कोई sys/socket.h है, तो आप सिर्फ कुछ इस तरह करने पर विचार हो सकता है:

#ifdef __WIN32__ 
# include <winsock2.h> 
#else 
# include <sys/socket.h> 
#endif 

मैं जानता हूँ कि आपने WinSock का उपयोग नहीं होगा, लेकिन जब से WinSock कैसे टीसीपी नेटवर्किंग है विंडोज के तहत किया जाता है, मुझे नहीं लगता कि आपके पास कोई विकल्प है। यहां तक ​​कि यदि आप क्रॉस-प्लेटफ़ॉर्म नेटवर्किंग लाइब्रेरी का उपयोग करते हैं, तो वह लाइब्रेरी आंतरिक रूप से WinSock को कॉल करेगी। अधिकांश मानक बीएसडी सॉकेट एपीआई कॉल WinSock में कार्यान्वित किए जाते हैं, इसलिए आसपास के कुछ फटजिंग के साथ, आप विंडोज और अन्य ओएस दोनों के तहत समान सॉकेट-आधारित प्रोग्राम संकलित कर सकते हैं। बस

#ifdef __WIN32__ 
    WORD versionWanted = MAKEWORD(1, 1); 
    WSADATA wsaData; 
    WSAStartup(versionWanted, &wsaData); 
#endif 

मुख्य() के शीर्ष पर मत भूलना ...अन्यथा आपकी सभी सॉकेट कॉल विंडोज के अंतर्गत असफल हो जाएंगी, क्योंकि आपकी प्रक्रिया के लिए डब्लूएसए सबसिस्टम प्रारंभ नहीं हुआ था।

+0

क्या आपको सॉकेट बंद करने के विंडोज संस्करण की भी आवश्यकता नहीं है? और कुछ और चीजें? – Pacerier

+0

हां, खिड़कियों के नीचे आपको बंद() के बजाय closesocket() को कॉल करने की आवश्यकता है। और शायद अन्य चीजें भी। –

0

मैं सिर्फ जोड़ने के लिए है कि आप विंडोज़ का उपयोग करने के सॉकेट पुस्तकालय चाहते हैं चाहते हैं:

  • शुरुआत में

    : अंत में WSAStartup()

  • फोन: फोन WSACleanup ()

सम्मान;

0

कोशिश चयनित पैकेज के साथ cygwin पुनर्स्थापित करने के लिए: जीसीसी-जी ++: GNU संकलन संग्रह C++, अधिभारित सर्वर और ग्राहक कार्यक्रम (शुद्ध) (devel श्रेणी से), बनाने: gnu संस्करण (devel), टर्मिनल ncurses (utils), एन्हांस्ड विम एडिटर्स (एडिटर्स), एक एएनएसआई सामान्य लिस्प कार्यान्वयन (गणित) और libncurses-devel (lib)।

यह लाइब्रेरी फ़ाइलों के तहत cygwin \ usr \ शामिल

सादर होना चाहिए।

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