Winsock编程
13小时前
说到Winsock,可能很多人还不太了解,但说到OICQ、ICQ、Foxmail、Netants、CuteFTP以及大名鼎鼎的BO2K等等,大家都应该是很熟悉的。如今是网络时代,这些基于网络的软件真的是红红火火!那你有没有想过这些软件是怎么写出来的呢?这就是本文将要介绍的内容:Socket编程!
Socket(中文译名:套接字)最初在Unix上出现,并很快成为Unix上最流行的网络编程接口之一。后来,微软将它引入到Windows中并得到实现,于是从Windows 95、WinNT4开始,系统就内置了Winsock1.1,后来到了Windows98、Windows2000,它内置的Winsock DLL更新为Winsock2.2。Winsock1.1有2种I/O方式,2种I/O模型,到了Winsock2.2,则有了2种I/O方式,5种I /O模型。另外,Winsock2.2对Socket进行了很多扩充与改进,包括名字解析、异步处理等。这些都是很有用的内容,但也比较复杂,要想在短短一篇文章里讲清楚是不可能的,本文的目的只是为你开个头,俗话说:万事开头难!其实Winsock编程是很例行公式化的。不过值得注意的是:有时它也很难把握,因为它编程的对象是网络,有时你发现运行程序得不到预期的结果,但却很难调试出到底哪里出了问题!
下面将向你介绍基本的Socket的客户端函数,并给出了一个简单的多线程端口扫描器的源代码!
先讲一下基本的编程步骤:
1. 由于Winsock目前有两个版本:2.2和1.1,所以我们首先必须判断系统所支持的Winsock版本!这就要靠WSAStartup函数了!另外还有一个WSACleanup函数!这两个函数是Winsock编程必须调用的,其中WSAStartup函数的功能是初始化Winsock DLL,因为在Windows下,Socket是以DLL的形式实现的。1.1版本的DLL为Winsock.dll,而2.2版本的DLL则为 Wsock32.dll,其中在2.2版本的系统中,对Winsock1.1函数的调用会由Wsock32.dll自动映射到Winsock.dll。 WSAStartup函数的功能就是初始化DLL,其函数原型为:
int WSAStartup (WORD wVersionRequested,LPWSADATA lpWSAData);
其中第一个参数为你所想需要的Winsock版本!低字节为主版本,高字节为副版本!由于目前Winsock有两个版本:1.1和2.2,因此该参数可以是 0x101或0x202;第二个参数是一个WSADATA结构,用于接收函数的返回信息!WSAStartup函数调用成功会返回0,否则返回非0值!
示例代码:
WSADATA wsaData;
if(WSAStartup(0x101,&wsaData))
{
//错误处理!
}
这里有一点题外话,由于Win 95,Win NT4自带的Winsock是1.1版本的,所以如果你的程序是基于Winsock2.2的,那很可能无法在上面运行!因此,如果你希望你写的程序被所有 Windows平台支持的话,最好将其声明成1.1版的,不过这样将无法使用很多Winsock2.2才有的特性!至于WSACleanup的用法很简单,用“WSACleanup();”就行了!另外,在DLL内部维持着一个计数器,只有第一次调用WSAStartup才真正装载DLL,以后的调用只是简单的增加计数器,而WSACleanup函数的功能则刚好相反,每调用一次使计数器减1,当计数器减到0时,DLL就从内存中被卸载!因此,你调用了多少次WSAStartup,就应相应的调用多少次的WSACleanup。
2.创建套接字
创建套接字有两个函数,socket和WSASocket,前者是标准的Socket函数,而后者是微软对Socket的扩展函数。socket函数有3个参数,第一个是指定通信发生的区域,在UNIX下有AF_UNIX、AF_INET、AF_NS等,而在Winsock1.1下只支持AF_INET,到了2.2则添了 AF_IRDA(红外线通信)、AF_ATM(异步网络通信)、AF_NS、AF_IPX等;第2个参数是套接字的类型,在AF_INET地址族下,有 SOCK_STREAM、SOCK_DGRAM、SOCK_RAW三种套接字类型。SOCK_STREAM也就是通常所说的TCP,而 SOCK_DGRAM则是通常所说的UDP,而SOCK_RAW则是用于提供一些较低级的控制的;第3个参数依赖于第2个参数,用于指定套接字所用的特定协议,设为0表示使用默认的协议。socket函数调用成功返回一个套接字描述符,错误则返回SOCKET_ERROR。
示例代码:
SOCKET sk;
sk=socket(AF_INET,SOCK_STREAM,0);
if(sk==SOCKET_ERROR)
{
//错误处理
}
3.连接服务器
在成功调用了socket函数后,对客户端来说就是与服务器端建立连接。同样,建立连接需要两个函数:connect和WSAConnect。前者是标准的 Socket函数,后者是微软的扩展函数。connect函数有3个参数,第1个是连接所使用的套接字描述符,第2个参数是一个sockaddr结构,sockaddr结构是一个通用的结构,它只是简单地定义了一个字节数组,在TCP/IP下一般将其解释为sockaddr_in结构,第3个参数则是该结构的长度,一般用sizeof函数来取得。connect函数调用失败则返回SOCKET_ERROR!
发表评论
-
评论 (
2012-01-20 11:56 568评论 ( 2011年10月04日 ... -
全国2011年1月自学考试综合英语(一)试题及答案 - 自考试题及答案 - 锐智博客
2012-01-20 11:56 564全国2011年1月自学考试综合英语(一)试题及答案 - 自考试 ... -
2011年五一江西萍乡武功山--绿郁葱葱的连绵高山草甸,漂亮
2012-01-20 11:55 6512011年五一江西萍乡武功山--绿郁葱葱的连绵高山草甸,漂亮 ... -
2011-3-20
2012-01-19 16:47 4502011-3-20 2011年03月20日 ... -
计算机一级考点
2012-01-19 16:47 566计算机一级考点 2011年05月27日 1.1计算机概 ... -
《 微型计算机原理与接口技术 》期末复习资料
2012-01-19 16:47 808《 微型计算机原理与接 ... -
计算机练习题1
2012-01-19 16:47 751计算机练习题1 2011年11月01日 一、单选题 ... -
一级计算机
2012-01-19 16:46 529一级计算机 2011年01月31日 1.1计算机概述 ... -
转:开源C++库比较
2012-01-17 06:29 667转:开源C++库比较 2012年01月13日 原文: ... -
Peer-to-Peer Sockets 工程入门
2012-01-17 06:29 614Peer-to-Peer Sockets 工程入 ... -
P8B-C/SAS/4L 最具性价比的服务器解决方案
2012-01-17 06:29 1438P8B-C/SAS/4L 最具性价比的服务器解决方案 201 ... -
java一个学期的成果
2012-01-17 06:29 476java一个学期的成果 2012年01月13日 ... -
英语的重要性
2012-01-16 05:10 619英语的重要性 2011年02月28日 英语的重要性 全球 ... -
背诵再背诵
2012-01-16 05:10 720背诵再背诵 2010年06月07 ... -
决定了,就不放弃!
2012-01-16 05:10 481决定了,就不放弃! 2010 ... -
转载:14个值得推荐的免费英文有声读物网站
2012-01-16 05:10 609转载:14个值得推荐的免费英文有声读物网站 2009年10月 ... -
好书网址十八
2012-01-16 05:10 571好书网址十八 2011年05月02日 【古代文化生活】 ...
相关推荐
WinSock编程规范及应用 WinSock编程规范及应用WinSock编程规范及应用
DELPHI下的Winsock编程
利用Winsock编程由同步和异步方式,同步方式逻辑清晰,编程专注于应用,在抢先式的多任务操作系统中(WinNt、Win2K)采用多线程方式效率基本达到异步方式的水平.
Winsock编程教程,资源质量非常好。
参考《Visual C++网络高级编程》(陈坚&陈伟...2.2节,自己写了客户端程序和服务器程序,winsock编程参考书中内容。 我写的这个服务器程序能将接收到的客户机程序显示出来,程序写的非常简单,注释详细,便于学习参考。
WinSock Generic QoS Mapping: (QOS_SPEC.DOC, revision 3.1, September 21, 1998): This defines details about the mapping between WinSock's Generic Quality of Service (GQOS) APIs, and the ReServation ...
winsock编程实例
基于TCP下多线程WINSOCK编程
socket编程基础介绍,介绍了流式套结字和数据报套结字编程模型。并介绍了两种编程模型的常用函数和数据结构
winsock编程接口https://blog.csdn.net/qq_41915225/article/details/88995689
利用简单的socket编程技术,实现在网络上一键获取图片,类似以前的网络蠕虫.适合初学者
网络版五子棋游戏,MFC编程和WinSock编程结合
自己编辑的,学习过得,下载的关于winsock编程的源代码程序
WINSOCK编程基础.ppt
简单的winsock编程源码,调用window api函数,服务器端和客户端可进行简单的聊天
WinSock编程规范及应用
VC6.0 winsock编程实例.pdf
该实验分为两个部分:编写程序能同时实现对多个域名的解析和编写程序获取并输出本地主机的所有适配器的 IP 地址,子网掩码,默认网关,MAC 地址。