"Winsock.h" 和 "Winsock2.h" ?

清晨曦月
博客专家认证
2009-04-30 01:25:13
这样的:
新学VC++.NET2008,发现WINDOWS.H里面包含了Winsock.h,然后又查看了WINSOCK.H和WINSOCK2.H产生了很多疑问:

1、我创建MFC静态DLL,工程里没发现WINDOWS.H被包含进来啊,难道自动的?

2、如果是自动的,那我在使用RECV的时候,调用的是WSOCK32.DLL里的函数了?也就是说,想调用WS2_32.DLL中的RECV的话,必须包含WINSOCK2.H到工程?可如果包含了,不会产生冲突吗,系统知道我用的是哪个RECV啊?

3、在WINSOCK.H中RECV是这样的:
int PASCAL FAR recv (
IN SOCKET s,
__out_bcount_part(len, return) __out_data_source(NETWORK) char FAR * buf,
IN int len,
IN int flags);
而在WINSOCK2.H中RECV是这样的:
#if INCL_WINSOCK_API_PROTOTYPES
WINSOCK_API_LINKAGE
int
WSAAPI
recv(
IN SOCKET s,
__out_bcount_part(len, return) __out_data_source(NETWORK) char FAR * buf,
IN int len,
IN int flags
);
#endif /* INCL_WINSOCK_API_PROTOTYPES */
有什么差异呢?

4、如果我想在工程中同时使用WSOCK32.DLL中的函数和WS2_32.DLL里面的函数,应该怎么声明他们呢,又该如何调用呢?

先100分吧,不好分配的时候再加!
...全文
1929 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengling981825 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liuzxchina 的回复:]
windows.h被包含进来了,位置是:
afxwin.h包含afx.h
afx.h包含afxver_.h
afxver_.h包含afxv_w32.h
afxv_w32.h包含windows.h
但包含windows.h的时候没有包含winsock.h
[/Quote]

windows.h有包含winsock.h

#if(_WIN32_WINNT >= 0x0400)
#include <winsock2.h>
#include <mswsock.h>
#else
#include <winsock.h>
#endif /* _WIN32_WINNT >= 0x0400 */
lzg0001 2009-05-08
  • 打赏
  • 举报
回复
安装 VC 后打开 windows.h 头文件,找到其中所有 winsock.h 全部替换成 winsock2.h,一劳永逸.
噢麦搞的 2009-05-07
  • 打赏
  • 举报
回复
接分
清晨曦月 2009-05-06
  • 打赏
  • 举报
回复
败了,准备结贴了,大家别着急拿分哈,呵呵呵呵呵呵呵,改天有时间的


一看这信息,咱就不是不接贴的人:
zcsor
等级:
可用分等级:中农
总技术分:6887
总技术分排名:3170
结帖率:101.56%

啥么叫牛啊!哈哈哈
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liuzxchina 的回复:]
windows.h被包含进来了,位置是:
afxwin.h包含afx.h
afx.h包含afxver_.h
afxver_.h包含afxv_w32.h
afxv_w32.h包含windows.h
但包含windows.h的时候没有包含winsock.h

C/C++ code
// Don't include winsock.h
#pragma push_macro("_WINSOCKAPI_")
#ifndef _WINSOCKAPI_
#define _WINSOCKAPI_
#endif

#include <windows.h>

#pragma pop_macro("_WINSOCKAPI_")




所以你要使用winsock2的函数就很简…
[/Quote]

这个详细啊
jlfuhappy 2009-05-04
  • 打赏
  • 举报
回复
winsock2是winsock的升级版本,直接用新版本就可以了,
scq2099yt 2009-05-04
  • 打赏
  • 举报
回复
winsock2是winsock的升级版本,所以只要包含winsock2则两者都可以调用。
清晨曦月 2009-05-04
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 hairetz 的回复:]
引用 2 楼 liuzxchina 的回复:
windows.h被包含进来了,位置是:
afxwin.h包含afx.h
afx.h包含afxver_.h
afxver_.h包含afxv_w32.h
afxv_w32.h包含windows.h
但包含windows.h的时候没有包含winsock.h

C/C++ code
// Don't include winsock.h
#pragma push_macro("_WINSOCKAPI_")
#ifndef _WINSOCKAPI_
#define _WINSOCKAPI_
#endif

#include <windows.h>

#pragma pop_macro("_WINSOCKAPI_")


[/Quote]
这个很强大啊,可很没看明白啊。。。。。

我试过单独包含WINSOCK.H,并且连接WSOCK32.LIB,但是我看RECV声明还是在WINSOCK2.H里面…………费劲
jyh_baoding 2009-05-04
  • 打赏
  • 举报
回复
楼上的都对
  • 打赏
  • 举报
回复
晕,我今天早上也遇到了这个问题,我的环境也是vs2008,我创建的是win32程序,而且是empty的,我写了一个socket的小程序,加了WinSock2.h就有冲突,什么头文件都不加,顺利编译通过...貌似自动包含了winsock.h
迷途的书童 2009-05-03
  • 打赏
  • 举报
回复
版本不一样, 现在一般用新版本2!
Wenxy1 2009-05-03
  • 打赏
  • 举报
回复
这样的:
新学VC++.NET2008,发现WINDOWS.H里面包含了Winsock.h,然后又查看了WINSOCK.H和WINSOCK2.H产生了很多疑问:

1、我创建MFC静态DLL,工程里没发现WINDOWS.H被包含进来啊,难道自动的?
stdafx.h里包含了各种头文件,当然包括winodws.h。

2、如果是自动的,那我在使用RECV的时候,调用的是WSOCK32.DLL里的函数了?也就是说,想调用WS2_32.DLL中的RECV的话,必须包含WINSOCK2.H到工程?可如果包含了,不会产生冲突吗,系统知道我用的是哪个RECV啊?
你要指定链接库嘛!

3、在WINSOCK.H中RECV是这样的:
int PASCAL FAR recv (
IN SOCKET s,
__out_bcount_part(len, return) __out_data_source(NETWORK) char FAR * buf,
IN int len,
IN int flags);
而在WINSOCK2.H中RECV是这样的:
#if INCL_WINSOCK_API_PROTOTYPES
WINSOCK_API_LINKAGE
int
WSAAPI
recv(
IN SOCKET s,
__out_bcount_part(len, return) __out_data_source(NETWORK) char FAR * buf,
IN int len,
IN int flags
);
#endif /* INCL_WINSOCK_API_PROTOTYPES */
有什么差异呢?
看MSDN的说明吧

4、如果我想在工程中同时使用WSOCK32.DLL中的函数和WS2_32.DLL里面的函数,应该怎么声明他们呢,又该如何调用呢?
包括它们的头文件,并且链接到这些库。

先100分吧,不好分配的时候再加!
biweilun 2009-05-03
  • 打赏
  • 举报
回复
升级版不用干嘛啊
hxpnihao13 2009-05-03
  • 打赏
  • 举报
回复
我记得winsock是1.1版本,winsock2是2.0版本
清晨曦月 2009-05-02
  • 打赏
  • 举报
回复
该结贴了,不然会挂住……


我还是无法在.NET 2008里使用WINSOCK.H,哎哎哎!即使包含了它,查看RECV什么什么的声明的时候还是在WINSOCK2.H里面,真烦人。
清晨曦月 2009-04-30
  • 打赏
  • 举报
回复
…………俺不,俺就要一起用:(
俺们那嘎达人都这样用的
liuzxchina 2009-04-30
  • 打赏
  • 举报
回复
winsock2是winsock的升级版本,直接用新版本就可以了,
blackcat242 2009-04-30
  • 打赏
  • 举报
回复
很少会混合使用winsock2和winsock的,里面的函数实际上在两个文件中是各有一份的
清晨曦月 2009-04-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liuzxchina 的回复:]
windows.h被包含进来了,位置是:
afxwin.h包含afx.h
afx.h包含afxver_.h
afxver_.h包含afxv_w32.h
afxv_w32.h包含windows.h
[/Quote]
这个……太狠了!


回家之后一定要瞅瞅!


产生一个疑惑,那我在输入RECV(的时候,就出现提示了,那个代码提示是哪来的?如果没导入WINSOCK.H的话,IDE咋知道我调用了RECV是WINAPI?还有就是我这时调用的RECV是哪个?WS2_32.DLL还是WSOCK32.DLL?

#include <winsock2.h>
#pragma comment(lib, "Ws2_32.lib")

这个……链接到WS2_32.lib就是说我这样就用的是WS2_32.DLL了吧。。。

于是

#include <winsock.h>
#pragma comment(lib, "WSOCK32.lib")

就可以用WSOCK32.DLL了?

那我要是鱼和熊掌兼得咋办呀……

难不成这样:

#include <winsock2.h>
#pragma comment(lib, "Ws2_32.lib")
#include <winsock.h>
#pragma comment(lib, "WSOCK32.lib")

那我咋指定用哪个库里面的函数啊,不会产生N多冲突吧…………
luckyboy101 2009-04-30
  • 打赏
  • 举报
回复
mark
加载更多回复(4)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧