मैंने अभी "नेटवर्क प्रोग्रामिंग के लिए बीज की मार्गदर्शिका" पुस्तक के माध्यम से winsock सीखना शुरू कर दिया है। मैं विंडोज़ के तहत प्रोग्रामिंग कर रहा हूं और इसे जीसीसी के माध्यम से चला रहा हूं। यह मेरा पहला सर्वर प्रोग्राम लिखने की शुरुआत है, लेकिन जब मैं संकलन करने की कोशिश करता हूं तो यह मुझे इन त्रुटियों को देता है।विंसॉक संकलन त्रुटि, यह addrinfo संरचनाओं और कुछ संबंधित कार्यों को नहीं देख सकता
/* Server */
#include <iostream>
#include <windows.h>
#include <winsock2.h>
using namespace std;
const int winsockVersion = 2;
#define BACKLOG 10
#define PORT 3000
int main(void){
WSADATA wsadata;
if (WSAStartup(MAKEWORD(winsockVersion,0),&wsadata) == 0){
struct addrinfo hints, *res;
memset(&hints,0,sizeof hints);
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
if (getaddrinfo(NULL,PORT,&hints,&res) == 0){
cout<<"-Call to get addrinfo successful!." << endl;
}
cout<<"res af_family" << res->ai_family << endl;
}
//clear stuff
if(WSACleanup() != 0){
cout<<"-WSACleanup unsuccessful" << endl;
}else{
cout<<"-WSACleanup successful" << endl;
}
return 0;
}
इन त्रुटियों मैं
g++ -o server.exe server.cpp -lws2_32
Process started >>>
server.cpp: In function `int main()':
server.cpp:20: error: aggregate `addrinfo hints' has incomplete type and cannot be defined
server.cpp:25: error: `AI_PASSIVE' was not declared in this scope
server.cpp:27: error: `getaddrinfo' was not declared in this scope
server.cpp:31: error: invalid use of undefined type `struct addrinfo'
server.cpp:20: error: forward declaration of `struct addrinfo'
server.cpp:54:2: warning: no newline at end of file
<<< Process finished.
संरचनाओं और कार्यों या तो windows.h या winsock.h में परिभाषित नहीं किया जाना चाहिए प्राप्त कर रहा हूँ हैं ?.
समाधान
संपादित जो कोई भी इस पर ठोकर करने के लिए, अपने स्रोत के शीर्ष पर
#define _WIN32_WINNT 0x501
#include <ws2tcpip.h>
जोड़ने getaddrinfo कहते हैं अपनी अघोषित कि।
अरे #define _WIN32_WINNT 0x501 के लिए धन्यवाद, मुझे कुछ परेशानी बचाई :) – Lefteris
कोई समस्या नहीं :-)। – silent
मैं विन 7, वीएस2015 पर हूं, और अब तक मुझे # डिफाईन स्टेटमेंट जोड़ना नहीं है, लेकिन डीआईडी को # अंतर्निहित कथन जोड़ने की जरूरत है। मेरा निर्माण env थोड़ा अजीब हो सकता है क्योंकि मैं पुराने पुस्तकालयों के एक सेट के साथ काम कर रहा हूं। – Andrew