Socket中winsock.h和winsock2.h的不同
来源:互联网 发布:java微信飞机大战 编辑:程序博客网 时间:2024/06/05 04:21
欢迎访问我的新博客:http://www.milkcu.com/blog/
原文地址:http://www.milkcu.com/blog/archives/1370899440.html
译文:Socket中winsock.h和winsock2.h的不同
原文:Is there a difference between <winsock.h> and <winsock2.h>?
译者:MilkCu
引言
初学Socket网络编程,很明显<socket.h>用于linux操作系统,但是<winsock.h>和<winsock2.h>除了版本不同外,还有什么不同呢?
译文
windows.h在新的Windows版本下编译时会包含winsock2.h,而在老版本中包含winsock.h,但是问题不仅局限在windows.h。当winsock.h在winsock2.h前包含时,编译会报错,因为两个文件不能共存的很好。winsock2.h设计的目的是替代winsock.h,而不是扩展它。在winsock.h中定义的所有内容在winsock2.h中也都定义了。如果winsock2.h在winsock.h前包含,winsock2.h定义了_WINSOCKAPI_,阻止编译器去处理后面的winsock.h,编译不会报错。但是如果winsock.h在winsock2.h前包含,winsock2.h没有检测到这些,而去重新定义winsock.h已经定义的东西,从而编译报错。
在同一个项目中同时使用winsock.h和winsock2.h要格外小心。例如,当使用winsock2.h编写自己的代码,但是使用仍包含winsock.h的第三方库的时候。
原文
windows.h
includes winsock2.h
when compiling for newer Windows versions, but for older development it includes winsock.h
instead. The problem is not limited to just windows.h
, though. Any time winsock.h
gets included before winsock2.h
, there will be compiler errors. The reason is because the two files DO NOT co-exist very well. winsock2.h
was designed to replace winsock.h
, not extend it. Everything that is defined in winsock.h
is also defined in winsock2.h
. If winsock2.h
is included before winsock.h
, winsock2.h
defines _WINSOCKAPI_
to prevent the compiler from processing subsequent winsock.h
includes, and all is fine. But if winsock.h
is included beforewinsock2.h
, winsock2.h
does not detect that and tries to re-define everything that winsock.h
has already defined, causing the compile to fail.
You have to be very careful when mixing code that uses winsock.h
with code that uses winsock2.h
in the same project. For instance, when writing your own socket code that uses winsock2.h
, and using third-party libraries that still use winsock.h
.
后记
这是Stack Overflow上的一篇问答,有点像国内的知乎,有些回答的质量不错的,正确性就要自己判断啦。
(全文完)
- Socket中winsock.h和winsock2.h的不同
- 关于WinSock.h和WinSock2.h的重复定义问题
- winsock.h与winsock2.h的区别(同时包含windows.h和winsock2.h报错重定义的问题)
- windows.h winsock2.h winsock.h的关系
- 【VS开发】winsock 错误多 windows.h和winsock2.h的顺序
- [Socket] winsock2.h
- winsock.h与winsock2.h冲突解决
- winsock2.h 的 recv
- winsock.h(Socket编程)
- WINSOCK.H WINSOCK2.H的区别及函数重复定义的解决方法
- WINSOCK.H WINSOCK2.H的区别及函数重复定义的解决方法
- WINSOCK.H WINSOCK2.H的区别及函数重复定义的解决方法
- WINSOCK.H WINSOCK2.H的区别及函数重复定义的解决方法
- WINSOCK.H与winsock2.h出现重定义错误的解决方法
- winsock2.h和windows.h冲突问题的解决方案
- #include <Windows.h> 和 <Winsock2.h>冲突的改进解决方案
- #include <Windows.h> 和 <Winsock2.h>冲突的改进解决方案
- WinSock2.h和windows.h发送冲突的解决方法
- shiro 与 redis 结合的解决方案 shiro-redis
- 一键搞定JavaEE应用,JRE+Tomcat+Mysql-JaveEE绿色运行环境JTM0.9版
- lightoj 1008 - Fibsieve`s Fantabulous Birthday
- 搭建Eclipse+MyEclipse开发环境
- 计算方法之用追赶法求线性方程组
- Socket中winsock.h和winsock2.h的不同
- Hibernate n+1问题
- Eclipse调试方法和常用快捷键
- 计算方法之用雅克比法求线性方程组
- WPF依赖属性
- IOS第三十天——利用xml解析查询火车票信息
- WEB 访问RemoteApp不能打开App
- 计算方法之改进的欧拉法计算常微分方程
- POI读取Excel文件的带注释小例子