在VC的SOCKET网络编程中,谁能说说winsock.h winsock2.h afxsock.h wsock32.lib WS2_32.lib他们的区别
发布网友
发布时间:2022-05-20 12:44
我来回答
共1个回答
热心网友
时间:2023-10-20 12:40
不会也是考网络编程吧?我们刚刚考好,刚复习完
我也是略懂
其实楼主还有一个没提到,就是 winsock.dll
楼主说的afxsock.h我倒是不怎么了解
其他的,他们间是这样的
所有的.h是头文件,.lib是静态库文件,.dll是动态库文件
之所以楼主能使用这些编程就是考这些分工严密的东东帮忙。
socket编程说到底就是使用网络的编程,和普通的程序不同,
socket要用到网络,那它就得用网络设备(就是网卡)。
但一般我们用来写程序的都是像c++这类高级语言,是不操作底层硬件的。
所以就需要有人来帮我们完成或者说屏蔽掉底层的操作。
大致流程是,首先,网卡会有驱动程序来驱动,一般是在系统内的.sys文件完成,
然后.dll会接管工作,此时都还是些硬件的操作,但通过动态链接库后,很多底层的细节开始被屏蔽,这里只指一些琐碎的操作.dll会帮你完成掉了,但其实.dll完成的也是个半成品,楼主也没办法直接用来编程。
于是.lib上场了,.lib将.dll处理的半成品拿来,将它们封装成一个个API,这样,我们就可以通过API来调用网卡的功能了,当然这还不够,API毕竟也是个很麻烦的东西,而且功能不够细化。
于是就做了.h,这些头文件是可以直接打开来看的,实际里面就是些调用API的命令,还有就是把和相关的业务逻辑的变量啊结构体啊给定义一下。
比如在winsock.h中会定义sockaddr_in这样的结构体,用它来表示一个主机的IP和端口很方便,不过也不复杂,楼主也当然可以定义自己的结构体,不过,正是因为这些头文件帮你定义好了很多业务中常用的变量结构体之类,使得你编程的时候能更加关心程序本身了。
大致关系就是这样子调用的。
在写程序中,头文件的包含是不能少的,静态库也必须放到程序里,当然可以通过开发环境的添加或者在程序中直接包含都行,动态链接库一般不用操心,会自带的,不过有时也会遇到损坏之类的,网上直接下一个就行了。
具体的winsock.h winsock2.h也就是些版本上的区别,就像QQ2009和QQ2010都是QQ,都能聊天,就是版本更新了,很多细小的地方有些变动而已。