/ / विजुअल्स इन विजुअल स्टूडियो - सी ++, विजुअल-स्टूडियो, विजुअल-स्टूडियो -2015, विनसॉक का उपयोग करना

विजुअल स्टूडियो में विंसॉक का उपयोग करना - सी ++, विजुअल स्टूडियो, विजुअल स्टूडियो-2015, विंसॉक

मैं एक C ++ नोब हूं।

मैं IP पते पर HTTP अनुरोध भेजने के लिए Winsock का उपयोग करना चाहता हूं। मुझे ऑनलाइन बहुत सारी सामग्री मिली, जो बहुत अच्छी है। सभी उदाहरणों में एक ही त्रुटि थी, मुझे एहसास हुआ कि वे सभी को विनसॉक की आवश्यकता है।

मैंने कभी भी C ++ में एक लाइब्रेरी का उपयोग नहीं किया, मुझे अपनी परियोजना (विज़ुअल स्टूडियो में) या क्या मुझे डाउनलोड करने की आवश्यकता है, के बारे में कुछ भी पता नहीं है।

यह विशेष रूप से कोड की निम्नलिखित पंक्तियों को पसंद नहीं करता है

#include<sys/socket.h>    //socket
#include<arpa/inet.h> //inet_addr
#include<netdb.h> //hostent

Microsoft मार्गदर्शिका मुझे यह नहीं बताती है कि मैं अपने प्रोजेक्ट में लायब्रेरी को कैसे ठीक या लिंक करूँ।

मैं Winsock को कैसे लिंक और उपयोग करूं?

धन्यवाद!

उत्तर:

उत्तर № 1 के लिए 1

यह विशेष रूप से कोड की निम्नलिखित पंक्तियों को पसंद नहीं करता है

#include<sys/socket.h>    //socket
#include<arpa/inet.h> //inet_addr
#include<netdb.h> //hostent

जो हेडर विंडोज पर उपलब्ध नहीं हैं, उनका उपयोग केवल अन्य प्लेटफॉर्म पर किया जाता है।

मैं Winsock को कैसे लिंक और उपयोग करूं?

विंडोज पर, आपको उपयोग करने की आवश्यकता है winsock.h या winsock2.h अपने कोड में, और से लिंक करें ws2_32.lib.

और आपको कॉल करने की आवश्यकता है WSAStartup() तथा WSACleanup(), जो अन्य प्लेटफार्मों पर मौजूद नहीं है।

और आपको उपयोग करने की आवश्यकता है SOCKET के बजाय int सॉकेट हैंडल के लिए। विंडोज पर, सॉकेट असली कर्नेल ऑब्जेक्ट हैं। अन्य प्लेटफार्मों पर, उन्हें फ़ाइल विवरणक के रूप में दर्शाया गया है।

और आपको कॉल करने की आवश्यकता है closesocket() के बजाय close() जब एक सॉकेट हैंडल को डिस्कनेक्ट / फ्रीज़ करना।

इसके अलावा, सबसे अन्य बीएसडी-आधारित सॉकेट एपीआई फ़ंक्शन कॉल (socket(), bind(), connect(), recv(), send(), select()विंडोज आदि अन्य प्लेटफॉर्म (जैसे, select() एक मामूली अंतर है - पहला पैरामीटर हैअवहेलना करना)। और, ज़ाहिर है, WinSock में कई विंडोज-विशिष्ट एक्सटेंशन हैं जो अन्य प्लेटफार्मों के पास नहीं हैं। लेकिन अगर आप किसी और के कोड का उपयोग करने की कोशिश कर रहे हैं जो आपको ऑनलाइन मिला है, तो संभावना है कि यह बीएसडी-संगत कार्यों का उपयोग कर रहा है।

कहा जा रहा है कि, विनसॉक एक निम्न-स्तर हैनेटवर्किंग एपीआई और सही ढंग से उपयोग करने के लिए बहुत मुश्किल है। और फिर आपको इसके ऊपर एचटीटीपी की तरह एक एप्लिकेशन-लेयर प्रोटोकॉल जोड़ना होगा, जो कि नॉब के लिए सही होना और भी कठिन है। कुछ नया सीखना चाहते हैं, लेकिन यह सही है कि बुनियादी बातों को समझे बिना HTTP में कूदना सबसे पहले आपदा का एक नुस्खा है। आप Microsoft के उपयोग से बेहतर हैं WinInet या WinHTTP इसके बजाय एपीआई, इसे आपके लिए सभी नेटवर्किंग और प्रोटोकॉल विवरणों को संभालने दें।


जवाब के लिए 2 № 2

[यहाँ नया, टिप्पणी नहीं कर सकता]

"विकल्प ..." जाने के बजाय, अपने ऐप को सफलतापूर्वक लिंक करने के लिए, आप निम्न लाइनें अपने में डाल सकते हैं stdafx.h शीर्षक:

#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#pragma comment(lib, "WS2_32.lib")

The #pragma comment लिंकर को WS2]32.lib लायब्रेरी का उपयोग करने के लिए कहता है जिसकी आपको आवश्यकता है.