Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在包含WinSock2.h时会出现大量编译器错误? 我试图用C++中的WiSOCK2.h进行UDP泛滥,但是我在Win SoCK2.h上得到了70个错误和17个警告,所有的错误都是重新定义,WS2DEF.H的语法错误,以及“不同的链接”。我是做错了什么,还是这是WinSock2的问题?如果有任何用处,我使用的是64位Windows 10,Visual Studio 2015 #include "stdafx.h" #include <WinSock2.h> #include <windows.h> #include <fstream> #include <time.h> #include "wtypes.h" #include "Functions.h" #pragma comment(lib, "ws2_32.lib") //Get IP cin.getline(TargetIP, 17); //Get IP cout << "Enter the Port: "; cin >> nPort; cout << endl; //Initialize WinSock 2.2 WSAStartup(MAKEWORD(2, 2), &wsaData); //Create our UDP Socket s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); //Setup the target address targetAddr.sin_family = AF_INET; targetAddr.sin_port = htons(nPort); targetAddr.sin_addr.s_addr = inet_addr(TargetIP); //Get input from user cout << "Please specify the buffer size:"; cin >> bufferSize; //Create our buffer char * buffer = new char[bufferSize]; while(true){ //send the buffer to target sendto(s, buffer, strlen(buffer), NULL, (sockaddr *)&targetAddr, sizeof(targetAddr)); } //Close Socket closesocket(s); //Cleanup WSA WSACleanup(); //Cleanup our buffer (prevent memory leak) delete[]buffer; #包括“stdafx.h” #包括 #包括 #包括 #包括 #包括“wtypes.h” #包括“Functions.h” #pragma注释(lib,“ws2_32.lib”) //获取IP cin.getline(TargetIP,17); //获取IP cout>nPort; cout缓冲区大小; //创建缓冲区 char*buffer=新字符[bufferSize]; while(true){ //将缓冲区发送到目标 sendto(s,buffer,strlen(buffer),NULL,(sockaddr*)和targetAddr,sizeof(targetAddr)); } //闭合插座 插座; //清理WSA WSACleanup(); //清理缓冲区(防止内存泄漏) 删除[]缓冲区;_C++_Windows_Winapi_Winsock2 - Fatal编程技术网 nPort; cout缓冲区大小; //创建缓冲区 char*buffer=新字符[bufferSize]; while(true){ //将缓冲区发送到目标 sendto(s,buffer,strlen(buffer),NULL,(sockaddr*)和targetAddr,sizeof(targetAddr)); } //闭合插座 插座; //清理WSA WSACleanup(); //清理缓冲区(防止内存泄漏) 删除[]缓冲区;,c++,windows,winapi,winsock2,C++,Windows,Winapi,Winsock2" /> nPort; cout缓冲区大小; //创建缓冲区 char*buffer=新字符[bufferSize]; while(true){ //将缓冲区发送到目标 sendto(s,buffer,strlen(buffer),NULL,(sockaddr*)和targetAddr,sizeof(targetAddr)); } //闭合插座 插座; //清理WSA WSACleanup(); //清理缓冲区(防止内存泄漏) 删除[]缓冲区;,c++,windows,winapi,winsock2,C++,Windows,Winapi,Winsock2" />

为什么在包含WinSock2.h时会出现大量编译器错误? 我试图用C++中的WiSOCK2.h进行UDP泛滥,但是我在Win SoCK2.h上得到了70个错误和17个警告,所有的错误都是重新定义,WS2DEF.H的语法错误,以及“不同的链接”。我是做错了什么,还是这是WinSock2的问题?如果有任何用处,我使用的是64位Windows 10,Visual Studio 2015 #include "stdafx.h" #include <WinSock2.h> #include <windows.h> #include <fstream> #include <time.h> #include "wtypes.h" #include "Functions.h" #pragma comment(lib, "ws2_32.lib") //Get IP cin.getline(TargetIP, 17); //Get IP cout << "Enter the Port: "; cin >> nPort; cout << endl; //Initialize WinSock 2.2 WSAStartup(MAKEWORD(2, 2), &wsaData); //Create our UDP Socket s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); //Setup the target address targetAddr.sin_family = AF_INET; targetAddr.sin_port = htons(nPort); targetAddr.sin_addr.s_addr = inet_addr(TargetIP); //Get input from user cout << "Please specify the buffer size:"; cin >> bufferSize; //Create our buffer char * buffer = new char[bufferSize]; while(true){ //send the buffer to target sendto(s, buffer, strlen(buffer), NULL, (sockaddr *)&targetAddr, sizeof(targetAddr)); } //Close Socket closesocket(s); //Cleanup WSA WSACleanup(); //Cleanup our buffer (prevent memory leak) delete[]buffer; #包括“stdafx.h” #包括 #包括 #包括 #包括 #包括“wtypes.h” #包括“Functions.h” #pragma注释(lib,“ws2_32.lib”) //获取IP cin.getline(TargetIP,17); //获取IP cout>nPort; cout缓冲区大小; //创建缓冲区 char*buffer=新字符[bufferSize]; while(true){ //将缓冲区发送到目标 sendto(s,buffer,strlen(buffer),NULL,(sockaddr*)和targetAddr,sizeof(targetAddr)); } //闭合插座 插座; //清理WSA WSACleanup(); //清理缓冲区(防止内存泄漏) 删除[]缓冲区;

为什么在包含WinSock2.h时会出现大量编译器错误? 我试图用C++中的WiSOCK2.h进行UDP泛滥,但是我在Win SoCK2.h上得到了70个错误和17个警告,所有的错误都是重新定义,WS2DEF.H的语法错误,以及“不同的链接”。我是做错了什么,还是这是WinSock2的问题?如果有任何用处,我使用的是64位Windows 10,Visual Studio 2015 #include "stdafx.h" #include <WinSock2.h> #include <windows.h> #include <fstream> #include <time.h> #include "wtypes.h" #include "Functions.h" #pragma comment(lib, "ws2_32.lib") //Get IP cin.getline(TargetIP, 17); //Get IP cout << "Enter the Port: "; cin >> nPort; cout << endl; //Initialize WinSock 2.2 WSAStartup(MAKEWORD(2, 2), &wsaData); //Create our UDP Socket s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); //Setup the target address targetAddr.sin_family = AF_INET; targetAddr.sin_port = htons(nPort); targetAddr.sin_addr.s_addr = inet_addr(TargetIP); //Get input from user cout << "Please specify the buffer size:"; cin >> bufferSize; //Create our buffer char * buffer = new char[bufferSize]; while(true){ //send the buffer to target sendto(s, buffer, strlen(buffer), NULL, (sockaddr *)&targetAddr, sizeof(targetAddr)); } //Close Socket closesocket(s); //Cleanup WSA WSACleanup(); //Cleanup our buffer (prevent memory leak) delete[]buffer; #包括“stdafx.h” #包括 #包括 #包括 #包括 #包括“wtypes.h” #包括“Functions.h” #pragma注释(lib,“ws2_32.lib”) //获取IP cin.getline(TargetIP,17); //获取IP cout>nPort; cout缓冲区大小; //创建缓冲区 char*buffer=新字符[bufferSize]; while(true){ //将缓冲区发送到目标 sendto(s,buffer,strlen(buffer),NULL,(sockaddr*)和targetAddr,sizeof(targetAddr)); } //闭合插座 插座; //清理WSA WSACleanup(); //清理缓冲区(防止内存泄漏) 删除[]缓冲区;,c++,windows,winapi,winsock2,C++,Windows,Winapi,Winsock2,我想您可能在包含的顺序上有问题 您可能会在以下方面遇到许多错误: 1>c:\program files (x86)\windows kits\8.1\include\um\winsock2.h(2373): error C2375: 'WSAStartup': redefinition; different linkage 1> c:\program files (x86)\windows kits\8.1\include\um\winsock.h(867): note: see

我想您可能在包含的顺序上有问题

您可能会在以下方面遇到许多错误:

1>c:\program files (x86)\windows kits\8.1\include\um\winsock2.h(2373): error C2375: 'WSAStartup': redefinition; different linkage
1>  c:\program files (x86)\windows kits\8.1\include\um\winsock.h(867): note: see declaration of 'WSAStartup'
这是因为
默认包括
,并且
提供了许多与
中的声明重叠的声明,当
包含在
之后时会导致错误

因此,您可能希望在
之前包含

#include <winsock2.h>
#include <windows.h>
我必须说,
\u WINSOCKAPI\u
宏的定义干扰了普通的头包含保护机制,以防止
包含
听起来像是基于实现细节的脆弱“黑客”,因此我可能更喜欢第一个选项

但在我看来,所有这些包含顺序的bug就像Win32的头文件中的bug,所以最好的办法是微软来修复它

编辑
正如评论中所建议的,另一种选择可能是在包含
之前定义WIN32,意思是
。但是,请注意,这也会阻止包含其他Windows标题

p.S.

如果您使用的是预编译头(
“stdafx.h”
,在您的问题中新显示的代码中),您可能还需要注意其中包含的顺序。

您的代码很可能有问题,但除非我们看到,否则我们很遗憾无法帮助您。至少,请向我们展示您的代码(请提供最小、完整的示例)。很抱歉,我忘了发布代码。请解释为什么在windows之前包含该代码会有所不同?
默认包括
,并且
提供了许多
的声明,当
之后包含
时,会导致错误。现在我看到您在问题中粘贴了一些源代码,并且使用了预编译头(
#include“stdafx.h”
)。由于
“stdafx.h”
包含在其他标题之前,请确保
stdafx.h
中也没有此包含冲突。好的,这确实有帮助,现在我的main.cpp中出现了四个错误“缓冲区初始化被大小写标签跳过”我想我现在知道了。非常感谢。不客气。很高兴为您服务。我知道这是一个很微妙的bug,在我最初的Win32编程经历中,我就被它击中了:)
#undef _WINSOCKAPI_
#define _WINSOCKAPI_  /* prevents <winsock.h> inclusion by <windows.h> */
#include <windows.h>
#include <winsock2.h>