没有合适的资源?快使用搜索试试~ 我知道了~
Windows Socket1.1 程序设计.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 130 浏览量
2022-06-14
15:23:16
上传
评论
收藏 42KB DOCX 举报
温馨提示
试读
31页
Windows Socket1.1 程序设计
资源推荐
资源详情
资源评论
Windows Socket1.1 程序设计
一、简介
是从 扩展而来的,其在继承
的基础上,又进行了新的扩充。这些扩充主要是提供了一些异步函数,并增
加了符合 !"# 消息驱动特性的网络事件异步选择机制。
由两部分组成:开发组件和运行组件。
开发组件:实现文档、应用程序接口$%& '引入库和一些头文
件。
运行组件:应用程序接口的动态链接库$ !#()"**'。
二、主要扩充说明
、异步选择机制:
的异步选择函数提供了消息机制的网络事件选择,当使用它
登记网络事件发生时,应用程序相应窗口函数将收到一个消息,消息中指示了发生的
网络事件,以及与事件相关的一些信息。
提供了一个异步选择函数 %%$',用它来注册
应用程序感兴趣的网络事件,当这些事件发生时,应用程序相应的窗口函数将收到一
个消息。
函数结构如下:
&%(%*+%,%%$#()-./0!"/12
32/2-4'5
参数说明:
:窗口句柄
32:需要发送的消息
-4:事件(以下为事件的内容)
值: 含义:
+"6,-%"期望在套接字上收到数据(即读准备好)时接到通知
+"6, .-期望在套接字上可发送数据(即写准备好)时接到通知
+"6##期望在套接字上有带外数据到达时接到通知
+"6%((-&.期望在套接字上有外来连接时接到通知
+"6(#!!-(.期望在套接字连接建立完成时接到通知
+"6(*#-期望在套接字关闭时接到通知
例如:我们要在套接字读准备好或写准备好时接到通知,语句如下:
7%%$//32/+"6,-%"8+"6, .-'5
如果我们需要注销对套接字网络事件的消息发送,只要将 -4设置为
、异步请求函数
在 中请求服务是阻塞的, !"# ()-.除了支持这
一类函数外,还增加了相应的异步请求函数$%%9:;$'5'。
、阻塞处理方法
为了实现当一个应用程序的套接字调用处于阻塞时,能够放
弃 (&< 让其它应用程序运行,它在调用处于阻塞时便进入一个叫“0##)=的例程,此
例程负责接收和分配 !"# 消息,使得其它应用程序仍然能够接收到自己的消息
并取得控制权。
!"#是非抢先的多任务环境,即若一个程序不主动放弃其控制权,别的程
序就不能执行。因此在设计 程序时,尽管系统支持阻塞操作,但
还是反对程序员使用该操作。但由于 <!公司下的 的套接字默
认操作是阻塞的, !"#作为移植的 #()-.也不可避免对这个操作支持。
在 实现中,对于不能立即完成的阻塞操作做如下处理:"**
初始化→循环操作。在循环中,它发送任何 !"#消息,并检查这个
调用是否完成,在必要时,它可以放弃 (&< 让其它应用程序执行(当然使用
超线程的 (&< 就不会有这个麻烦了>6>)。我们可以调用
%(2($'函数取消此阻塞操作。
在 中,有一个默认的阻塞处理例程 20$'简单地
获取并发送 !"#消息。如果要对复杂程序进行处理,中
还有 %20$'提供用户安装自己的阻塞处理例程能力;与该函数相
对应的则是 %<20$',它用于删除先前安装的任何阻塞处理例
程,并重新安装默认的处理例程。请注意,设计自己的阻塞处理例程时,除了函数
%(20$'之外,它不能使用其它的 %& 函
数。在处理例程中调用 %(20$'函数将取消处于阻塞的操作,它
将结束阻塞循环。
、出错处理
为了和以后多线程环境( !"#<! :)兼容,它提供
了两个出错处理函数来获取和设置当前线程的最近错误号。(%9*-$'和
%*-$')
、启动与终止
使用函数 %1$'和 %(1$'启动和终止套接字。
三、 网络程序设计核心
我们终于可以开始真正的 网络程序设计了。不过我们还是先
看一看每个 网络程序都要涉及的内容。让我们一步步慢慢走。
、启动与终止
在所有 函数中,只有启动函数 %1$'和终止函数
%(1$'是必须使用的。
启动函数必须是第一个使用的函数,而且它允许指定 %& 的
版本,并获得 #()-. 的特定的一些技术细节。本结构如下:
&%(%*+%,%1$#,"?,@1/*&%"%.%
%"'5
其中 ?,@1保证 #()-.可正常运行的 "**版本,如果不支
持,则返回错误信息。
我们看一下下面这段代码,看一下如何进行 %1$'的调用
#,"?,@15定义版本信息变量
%"%.%"5定义数据信息变量
5定义错误号变量
?,@173%)-#,"$/'5给版本信息赋值
7%1$?,@1/A"'5给错误信息赋值
B$C7'
D
15告诉用户找不到合适的版本
E
确认 "**支持 版本
"**版本可以高于
系统返回的版本号始终是最低要求的 ,即应用程序与 "**中可支持的最低版本
号
B$*#;.-$"?'C7880 ;.-$"?'C7'
D
%(1$'5告诉用户找不到合适的版本
15
E
"**被进程接受,可以进入下一步操作
关闭函数使用时,任何打开并已连接的 #()6.,-%3套接字被复位,但那些
已由 $'函数关闭的但仍有未发送数据的套接字不受影响,未发送的数据
仍将被发送。程序运行时可能会多次调用 %1$'函数,但必须保证每次调用
时的 ?,@1的值是相同的。
、异步请求服务
除支持 中同步请求,还增加了了一类异
步请求服务函数 %%9:;$'。该函数是阻塞请求函数的异步版本。应用程
序调用它时,由 "**初始化这一操作并返回调用者,此函数返回
一个异步句柄,用来标识这个操作。当结果存储在调用者提供的缓冲区,并且发送一
个消息到应用程序相应窗口。常用结构如下:
0%!"*-05
7FF5
07%%0!$/32//G1B/G1H'5
需要注意的是,由于 的内存对像可以设置为可移动和可丢弃,因此在
操作内存对象是,必须保证 "**对象是可用的。
、异步数据传输
使用 $'或 $'函数来发送数据,使用 4$'或 4B$'来接收
数据。不鼓励用户使用阻塞方式传输数据,因为那样可能会阻塞
整个 环境。下面我们看一个异步数据传输实例:
假设套接字 在连接建立后,已经使用了函数 %%$'在其上注册
了网络事件 +"6,-%"和 +"6, .-,并且 32值为 <36#(),那么我们可以
在 消息循环中增加如下的分支语句:
<36#()I
$&'
D
+"6,-%"I
74$&/1J/2/'5
G5
+"6, .-I
$$&/1J//'C7#()-.6-,,#,'
G5
E
G5
、出错处理
提供了一个函数来获取最近的错误码 %9*-$',推荐的编
写方式如下:
7$/1J//'5
B$$77#()-.6-,,#,'AA$%9*-$'77%#<*"*#()''
DE
实例应用:
基于 ?1(KK的 %& 研究
为了方便网络编程,L 年代初,由 3B 联合了其他几家公司共同制定了一
套 !"# 下的网络编程接口,即 规范,它不是一种网络协议/
而是一套开放的、支持多种协议的 下的网络编程接口。现在的 已
经基本上实现了与协议无关,你可以使用 来调用多种协议的功能,但较常使
用的是 .(& & 协议。 实际在计算机中提供了一个通信端口,可以通过这个端
口与任何一个具有 接口的计算机通信。应用程序在网络上传输,接收的信息
都通过这个 接口来实现。
微软为 ?( 定义了 类如 (% 类和派生于 (%的
( 类,它们简单易用,读者朋友当然可以使用这些类来实现自己的网络程序,
但是为了更好的了解 %& 编程技术,我们这里探讨怎样使用底层的 %& 函数
实现简单的 网络应用程式设计,分别说明如何在 4 端和 ( 端操
作 ,实现基于 .(& & 的数据传送,最后给出相关的源代码。
在 ?( 中进行 !#() 的 %& 编程开发的时候,需要在项目中使用下面三个文
件,否则会出现编译错误。
. !#()0I这是 !#()%& 的头文件,需要包含在项目中。
.#()* I !#()%& 连接库文件。在使用中,一定要把它作为项
目的非缺省的连接库包含到项目文件中去。
. !#()"**I !#() 的动态连接库,位于 !"# 的安装目录下。
一、服务器端操作 (套接字)
'在初始化阶段调用 %1$'
此函数在应用程序中初始化 "**,只有此函数调用成功后,
应用程序才可以再调用其他 "** 中的 %& 函数。在程式中调用该
函数的形式如下:%1$$#,"'$$MMN8',
(*&%"%.%)A%"',其中$MMN8'表示我们用的是 版
本,% 用来存储系统传回的关于 的资料。
'建立
初始化 的动态连接库后,需要在服务器端建立一个监听的 ,为
此可以调用 $'函数用来建立这个监听的 ,并定义此 所使用的通
信协议。此函数调用成功返回 对象,失败则返回 !?%* "6#()-.$调用
%9*-$'可得知原因,所有 的函数都可以使用这个函数来获
取失败的原因'。
#()-.&%(%*+%,$B//'
剩余30页未读,继续阅读
资源评论
老帽爬新坡
- 粉丝: 79
- 资源: 2万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功