问题描述:在 VC 6.0中使用socket相关的函数时没有什么问题,可是到了.net下就有以下类似的错误,
c:\program files\microsoft visual studio8\vc\platformsdk\include\winsock2.h(112) : error C2011: “fd_set”:“struct”类型重定义
c:\program files\microsoft visual studio8\vc\platformsdk\include\winsock.h(54) : 参见“fd_set”的声明
c:\program files\microsoft visual studio8\vc\platformsdk\include\winsock2.h(147) : warning C4005: “FD_SET”:宏重定义
c:\program files\microsoft visual studio8\vc\platformsdk\include\winsock.h(88) : 参见“FD_SET”的前一个定义
c:\program files\microsoft visual studio8\vc\platformsdk\include\winsock2.h(156) : error C2011: “tim”:“struct”类型重定义
c:\program files\microsoft visual studio8\vc\platformsdk\include\winsock.h(97) : 参见“tim”的声明
c:\program files\microsoft visual studio8\vc\platformsdk\include\winsock2.h(212) : error C2011: “hostent”:“struct”类型重定义
c:\program files\microsoft visual studio8\vc\platformsdk\include\winsock.h(153) : 参见“hostent”的声明
c:\program files\microsoft visual studio8\vc\platformsdk\include\winsock2.h(225) : error C2011: “netent”:“struct”类型重定义
c:\program files\microsoft visual studio8\vc\platformsdk\include\winsock.h(166) : 参见“netent”的声明
c:\program files\microsoft visual studio8\vc\platformsdk\include\winsock2.h(232) : error C2011: “servent”:“struct”类型重定义
c:\program files\microsoft visual studio8\vc\platformsdk\include\winsock.h(173) : 参见“servent”的声明
c:\program files\microsoft visual studio8\vc\platformsdk\include\winsock2.h(244) : error C2011: “protoent”:“struct”类型重定义
c:\program files\microsoft visual studio8\vc\platformsdk\include\winsock.h(185) : 参见“protoent”的声明
c:\program files\microsoft visual studio8\vc\platformsdk\include\winsock2.h(400) : error C2011:“sockaddr_in”: “struct”类型重定义
解决方法:
根据网上搜索得到的资料, 以及检查 WinSock2.h , WinSock.h , windows.h 三个文件,
可以得知 这个错误是你的文件中即包含了 WinSock.h 又包含了WinSock2.h 文件。
如果你在文件中 写
-------------
#include <WinSock.h>
#include <WinSock2.h>
---------------------------
这样就会出错,但
-------------
#include <WinSock2.h>
#include <WinSock.h>
---------------------------
这样写就不会出错,因为WinSock2.h 中已经通过定义#define _WINSOCKAPI_ 来避免在包含WinSock.h了。
但这个错误跟多的出现实因为 windows.h 和WinSock2.h同时使用的情况,因为 windows.h 默认会包含WinSock.h ,所以如果你在文件中写
-------------
#include <Windows.h>
#include <WinSock2.h>
---------------------------
就会出现这个错误。
但写成
-----------------------------
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>
#include <WinSock2.h>
--------------------------------
就也不会出错,因为WIN32_LEAN_AND_MEAN 宏没有定义的情况下windows.h才会包含 WinSock.h 头文件的。具体可以看windows.h文件。stdafx.h头文件就是先定义了一个WIN32_LEAN_AND_MEAN的。
但我的错误却都是这样写,而是因为写成
-----------------------
#include <objbase.h>
#include <xxxxxx.h>
---------------------
原因是objbase.h 又先去包含了windows.h 头文件,而xxxxxx.h 文件中包含了 WinSock2.h 文件。
出现这类问题只能自己去检查头文件的引用和顺序等关系了。当文件引用关系比较复杂的情况下,找起来还是很麻烦的。
第二种[解决方案]
问题描述]
在包含了<windows.h>以及<winsock2.h>的工程中,编译有时会出现如
下错误:
error C2011: 'fd_set' : 'struct' type redefinition
error C2011: 'timeval' : 'struct' type redefinition
....
error C2375: 'accept' : redefinition; different linkage
[原因分析]
主要原因是因为<windows.h>中包含了<winsock.h>头文件,由于其版
本的不同,导致出
现上述的错误。<windows.h>中相关代码如下:
#ifndef WIN32_LEAN_AND_MEAN
#include <cderr.h>
#include <dde.h>
#include <ddeml.h>
........
#ifndef _MAC
#include <winperf.h>
#include <winsock.h>
#endif
.......
#include <commdlg.h>
#endif
#endif
[解决方案]
由以上代码可以看出如果在没有定义WIN32_LEAN_AND_MEAN宏
的大前
提下windows.h有可能包含winsock.h 头文件,因此我们得出一个很简单
的解决方
法就是在包含<windows.h>之前定义WIN32_LEAN_AND_MEAN宏,如
下所示:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
转载:
http://blog.chinaunix.net/space.php?uid=20680966&do=blog&cuid=689402
http://xia-siyu.blog.163.com/blog/static/2748304120106984151155/
分享到:
相关推荐
误删注册表winsock没有备份,导致无法上网时,导入这两个文件马上就可以解决。 正常上网的win10家庭版中导出的。 下载后可直接使用
C语言头文件 WINSOCK2C语言头文件 WINSOCK2C语言头文件 WINSOCK2C语言头文件 WINSOCK2C语言头文件 WINSOCK2C语言头文件 WINSOCK2C语言头文件 WINSOCK2C语言头文件 WINSOCK2C语言头文件 WINSOCK2C语言头文件 WINSOCK...
虽然拓展性和功能性更强,但是对于简单的普通使用的确更麻烦了,全部面向对象的操作实在不比Winsock.OCX事件驱动程序模式来的“傻瓜” 怀念Winsock.OCX,故特地移植到VB.NET上。完美兼容,回归简单。 注意:记得...
WinSock
PowerBuilder9.0中使用winsock.pbl和PSLIB21.DLL进行网络通信(聊天、信息推送等)
WINSOCKAPI2设计简单的WINSOCKAPI2文件包括服务器界面
用winsock.pbl写的一个powerbuilder下的socket实例,对初学者很有帮助。
WinSock.pbl进行通讯,请参观,下载
使用winsock.pbl开发socket通信的详细程序。包含客户端源程序和服务器端源程序。PB6测试通过。功能全面。
采用WINSOCK.ocx控件进行多客户端连接的服务端。
使用WinSock.pbl进行通讯,网上的一个winsock通讯例子
winsock.pbl pb6通信调用aaaaaaaaaaaa
编写与Winsock1兼容的程序你需要引用头文件WINSOCK.H,如果编写使用Winsock2的程序,则需要引用WINSOCK2.H。此外还有一个MSWSOCK.H头文件,它是专门用来支持在Windows平台上高性能网络程序扩展功能的。使用WINSOCK.H...
Winsock.2网络编程实用教程)源码
// 定义套接字地址中的域 address.sin_addr.s_addr = htonl(INADDR_ANY); address.sin_addr.s_addr = inet_addr(IP_ADDR); // 定义套接字地址 address.sin_port = htons(PORT); // 定义套接字端口 char buf...
Windpows Sockets 是广泛应用的、开放的、支持多种协议的网络编程接口,主要由winsock.h 头文件和动态链接库winsock.dll组成。
文件为Windows10系统的winsock文件,可以在误删除winsock和QQ启动报initialization failure:0×0000000c错误及软件无法正常打开时使用
客户端卸载后上不网的解决方法,winsock和winsock2注册表,用于重新修复10的注册表
Delphi的WinSock2.pas文件,供网络编程使用 使用方法:WinSock2.pas安装步骤,Componet--> install component..--> 选择WinSock2.pas文件--> install;
winsock编程chm格式 Winsocket编程之TCP/IP体系结构 [文章导读] TCP/IP协议实际上就是在物理网上的一组完整的网络协议......