Windows_Socket_API编程.ppt_第1页
Windows_Socket_API编程.ppt_第2页
Windows_Socket_API编程.ppt_第3页
Windows_Socket_API编程.ppt_第4页
Windows_Socket_API编程.ppt_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第22章WindowsSocketAPI编程 随着Windows操作系统的普及 Microsoft公司联合其他计算机软硬件厂商共同开发了Windows下的网络编程接口 WindowsSocketAPI WindowsSockets规范定义了一个在TCPP IP网络上可作为标准使用的应用编程接口 由于它支持多种协议体制下的网络通信 支持多种编程语言 而且在许多操作系统上具有广泛的适用性 所以为网络开发人员提供了方便 本章将介绍VisualC 环境下怎样使用WindowsSocketAPI进行网络编程 22 1WindowsSockets概述 WindowsSockets规范的套接口模型现在已是TCP IP网络标准 作为一个开放的 支持多种协议的网络编程接口在Windows下得到广泛的应用 已成为Windows网络编程事实上的标准 使用这种规范 用户可以方便地实现异构网络操作系统之间的通信 22 1 1WindowsSockets的发展 上世纪80年代初期 美国政府的高级研究工程机构 AdvancedResearchProjectsAgency ARPA 给加利福尼亚大学Berkeley分校提供了资金 让他们在UNIX操作系统下实现TCP IP协议 作为项目的一部分 研究人员为TCP IP网络开发了一个应用程序接口 这个应用程序接口称为Socket接口 现在 Socket接口已经成为TCP IP网络最为通用的API 已经成为事实上的标准 22 1 2WindowsSockets的类型 在Windows网络编程中 套接字接口主要有三种类型 流式套接字 数据报套接字以及原始套接字 1 流式套接字 streamsocket 2 数据报套接字 datagramsocket 3 原始套接字 rawsocket 22 1 3WindowsSockets扩展 WindowsSockets提供了许多在标准的BerkeleySockets之外的扩展函数 使用这些扩展的函数应用程序能更好地处理基于消息的异步发送的网络事件 主要有以下几个方面 1 异步选择机制2 异步请求函数3 阻塞处理方法4 出错处理5 启动与终止 22 1 4套接字编程模型 在网络编程中最常用的方案便是客户机 服务器模型 在模型中客户应用程序向服务器程序请求服务 一个服务程序通常在一个固定的地址监听对服务的请求 直到一个客户对这个服务的地址提出了连接请求 在这个时刻 服务程对客户的请求作出适当的反应 为客户提供服务 22 2WindowsSocketAPI主要函数 WindowsSockets提供了许多套接字函数 用户利用这些函数可以很容易地进行编程 本节将对常用的一些套接字函数 及利用这些函数进行网络编程的步骤进行详细讲解 22 2 1初始化WinSock 每个WinSock应用都必须加载WinSockDLL的相应版本 加载WinSock库是通过调用WSAStartup 函数实现的 WSAStartup 对进程初始化WS2 32 DLL的使用 其原型如下 intWSAStartup WORDwVersionRequested LPWSADATAlpWSAData 22 2 2创建套接字 socket 函数的功能是创建套接字 应用程序在使用套接字前 首先必须创建一个套接字 应用程序调用socket 函数来创建套接字 该函数的原型如下 SOCKETsocket intaf inttype intprotocol 22 2 3绑定地址 在定义一个套接字后 需要为其指定本机地址 协议和端口号 bind 函数用于将套接字绑定到一个已知的地址上 该函数的原型如下 intbind SOCKETs conststructsockaddrFAR name intnamelen 22 2 4将套接字设置为监听状态 当服务器端的Socket对象绑定之后 必须建立一个监听的队列来接收客户端的连接请求 调用listen 函数使服务器端的Socket进入监听状态 并设定可以建立的最大连接数 目前连接数最大值限制为5 最小值为1 该函数的原型如下 intlisten SOCKETs intbacklog 22 2 5发送连接请求 connect 函数用于发送一个连接请求 该函数的原型如下 intconnect SOCKETs conststructsockaddrFAR name intnamelen 22 2 6接受连接请求 当客户端提出连接请求时 服务器端要调用要accept 函数接受客户端的连接请求 accept 函数的原型如下 SOCKETPASCALFARaccept SCOKETs structsockaddrFAR addr intFAR addrlen 22 2 7发送数据 不论是客户还是服务器应用程序都用send 函数来向TCP连接的另一端发送数据 客户程序一般用send 函数向服务器发送请求 而服务器则通常用send 函数来向客户程序发送应答 send 函数的原型如下 intPASCALFARsend SOCKETs constcharFAR buf intlen intflags 22 2 8接收数据 不论是客户还是服务器应用程序都用recv 函数从TCP连接的另一端接收数据 该函数的原型如下 intPASCALFARrecv SOCKETs charFAR buf intlen intflags 22 2 9关闭套接字 应用程序在使用完套接字以后 需要将其关闭 并释放其相关资源 Closesocket 函数用于关闭一个描述符为s套接字 并释放分配给该套接字的资源 如果s涉及一个正在进行的连接 则该连接被释放 该函数的原型如下 BOOLclosesocket SOCKETs 22 2 10关闭加载的套接字库 应用程序在使用完Socket库后 要调用WSACleanup 函数来解除与Socket库的绑定并且释放Socket库所占用的系统资源 该函数的原型如下 intWSACleanup void 22 2 11确定套接字状态 select 函数用于确定一个或多个套接口的状态 对每一个套接口 调用者可查询它的可读性 可写性及错误状态信息 22 3WindowsSocketAPI编程步骤读者了解了WindowsSocketAPI相关的概念及函数之后 本节将通过一个简单的客户端 服务器例子来说明如何使用WindowsSocketAPI进行网络编程 22 3 1引入所需文件 WinSock包括开发组件和运行组件两大部分 开发组件包括WinSock实现文档 应用程序接口 API 引入库和一些头文件 运行组件包括WinSock应用程序接口的动态连接库 以WinSockV2 0为例 在VisualC 6 0中使用WinSock编程时 需要将以下三个文件包含到项目中 头文件 Winsock2 h 库文件 WS2 32 LIB 动态库 WS2 32 DLL 22 3 2服务器端编程 通常情况下在TCP IP网络中 通信的两个进程之间通常使用客户机 服务器模式 服务器端编程通常遵循以下步骤 1 加载套接字库 创建套接字 WSAStartup socket 2 绑定套接字到一个IP地址和一个端口上 bind 3 将套接字设置为监听模式等待连接请求 listen 4 请求到来后 接受连接请求 返回一个新的对应于此次连接的套接字 accept 5 用返回的套接字和客户端进行通信 send recv 6 返回 等待另一连接请求 7 关闭套接字 关闭加载的套接字库 closesocket WSACleanup 22 3 3客户端编程 通常客户端遵循以下编程步骤 1 加载套接字库 创建套接字 WSAStartup socket 2 向服务器发出连接请求 connect 3 和服务器端进行通信 send recv 4 关闭套接字 关闭加载的套接字库 closesocket WSACleanup 22 4基于WinSock的简单聊天室的实现 本节将通过一个聊天室的实例 使读者加深对WindowsSockets编程的认识 本实例使用面向连接的客户端 服务器模式 22 4 1系统总体设计 整个系统分为服务器和客户端两部分 服务器的界面如图22 4所示 客户端的界面如图22 5所示 服务器对话框中主要控件如表22 10所示 客户端对话框中主要控件如表22 11所示 22 4 2创建服务器端工程 下面列出的是创建服务器端应用程序的具体步骤 22 4 3添加服务器端代码 创建完服务器端工程后 在工程中添加相应代码 首先在服务器窗口类CWinSockServerDlg中添加以下变量 22 4 4服务器线程 服务器端最重要的函数是服务器线程函数 使用此函数可以接收多个客户端连接 还负责接收客户端发送的数据 并将接收的数据发送到其它客户端 22 4 5创建客户端工程 客户端负责发送用户聊天数据 并接收服务器发送过来的其它客户端的数据 创建客户端工程的步骤与创建服务器工程相同 只需将工程名称改为WinSockClient 具体步骤就不再赘述 创建完工程后 在工程中添加相应的控件及事件 有关客户端相关控件参见表22 11 添加完控件后便可以编写具体的代码了 22 4 6添加客户端代码 创建完客户端工程后 在工程中添加相应代码 首先在客户端窗口类CWinSockServerDlg中添加以下变量 22 4 7客户端线程 服务器端最重要的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论