网络编程技术 设计、制作:谭献海 Email:xhtan@home.swjtu.edu.cn.

Slides:



Advertisements
Similar presentations
7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
Advertisements

高级服务器设计和实现 1 —— 基础与进阶 余锋
NAT与ICMP交互.
網路程式設計 (Network Programming)
计算机网络课程总结 一、计算机网络基础 计算机网络定义和功能、基本组成 OSI/RM参考模型(各层的功能,相关概念, 模型中数据传输 等)
公司保密工作要求及 院商秘保护工作安排 2014年9月12日.
Original by 黄嘉輝 Modification by 游象甫
TCP/IP Socket网络编程.
Oracle数据库 Oracle 子程序.
Socket.
《信息通信网络概论》课程实验 东南大学自动化学院.
基于WinSock的邮件系统 1 设计目标: 1.1 SMTP发送邮件服务器(c语言) 1.2 POP3接受邮件服务器(c语言)
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
在PHP和MYSQL中实现完美的中文显示
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
Hadoop I/O By ShiChaojie.
第8章 Winsock API 8.1 字节排序函数 8.2 IP地址转换函数 8.3 网络信息获取函数(数据库函数)
大学计算机基础 典型案例之一 构建FPT服务器.
SOCKET编程原理.
SVN服务器的搭建(Windows) 柳峰
管理信息结构SMI.
走进编程 程序的顺序结构(二).
MFC WinSock类的编程 为简化套接字网络编程,更方便地利用Windows的消息驱动机制,微软的基础类库(Microsoft Foundation Class Libary,简称MFC),提供了两个套接字类,在不同的层次上对Windows Socket API函数进行了封装,为编写Windows.
网络常用常用命令 课件制作人:谢希仁.
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
Windows网络操作系统管理 ——Windows Server 2008 R2.
第2章 套接字网络编程基础 2.1 UNIX套接字网络编程接口的 产生与发展 2.2 套接字编程的基本概念 2.3 面向连接的套接字编程
网络编程技术 授课教师:谭献海
逆向工程-汇编语言
《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:
第3章 WinSock 编程 3.1 Windows Sockets 概述 3.2 WinSock 库函数 3.3 网络应用程序的运行环境
PaPaPa项目架构 By:Listen 我在这.
线程同步与异步套接字编程 主讲人:孙鑫
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
DevDays ’99 The aim of this mission is knowledge..
第 8 章 网络程序设计.
程序设计工具实习 Software Program Tool
SOA – Experiment 2: Query Classification Web Service
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
第四章 团队音乐会序幕: 团队协作平台的快速创建
DQMClientDim.cxx及双光子练习
本节内容 消息的分发 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
实验四、TinyOS执行机制实验 一、实验目的 1、了解tinyos执行机制,实现程序异步处理的方法。
实验七 安全FTP服务器实验 2019/4/28.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
Select模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
2019/5/3 JAVA Socket(UDP).
第4章 Excel电子表格制作软件 4.4 函数(一).
Chapter 18 使用GRASP的对象设计示例.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Visual Basic程序设计 第13章 访问数据库
郑 昀 应用开发事业部 神州泰岳 SIP多方会话消息 之实例讲解 郑 昀 应用开发事业部 神州泰岳
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
WSAAsyncSelect 模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang
_07多连接之select模型 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
阻塞式模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
MFC的六大核心 机制 命令传递 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
助教:廖啟盛 JAVA Socket(UDP) 助教:廖啟盛
本节内容 导出表 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
实验六、COM类型病毒分析实验 实验开发教师: 刘乃琦 谌黔燕.
Presentation transcript:

网络编程技术 设计、制作:谭献海 Email:xhtan@home.swjtu.edu.cn

Winsock 一、  Winsock概述 Windows下网络编程的规范-Windows Sockets是Windows下得到广泛应用的、开放的、支持多种协议的网络编程接口。 Windows Sockets规范以U.C. Berkeley大学BSD UNIX中流行的Socket接口为范例定义了一套Micosoft Windows下网络编程接口。它不仅包含了人们所熟悉的Berkeley Socket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。 winsock有开发组件和运行组件二大部分,开发组件是供开发应用程序使用,包括定义的宏常数值、数据结构和函数调用接口原型。运行组件是winsock应用程序接口的动态链接库—winsock.DLL,应用程序在执行时通过装入DLL实现网络通信功能。

winsock 应用程序调用Windows Sockets的API实现相互之间的通讯。Windows Sockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。它们之间的关系如图1-1。 应用程序1 应用程序2 网络编程接口winsock 网络通信协议服务接口TCP/IP 操作系统 windows 物理通信介质 图1-1 winsock所处的位置

Windows 平台支持的Winsock 最新版本 采用Winsock 1的应用必须有Winsock.h 头文件 使用Winsock 2的应用需要Winsock2.h 头文件。

WSAStartup (初始化Windows Sockets API) WInsock2 的起始与结束 WSAStartup (初始化Windows Sockets API) 应用程序 WSACleanup (释放所使用的Windows Sockets DLL)

Winsock 二、 Winsock提供的函数调用 Windows Socket 1.1库函数概览   Windows Socket 1.1库函数概览 2.1 基本套接口函数  Windows Sockets规范包含了以下30个Berkeley风格的套接口例程:  *表示例程在应用于阻塞套接口时会阻塞。

基本套接口函数 socket() 创建一个通讯端点并返回一个套接口。 bind() 把一个本地名字和一个无名的套接口捆绑起。 Listen() accept()* 响应联结请求,并且新建一个套接口。原来的套接口则返回监听状态。 connect()* 初始化到一个指定套接口上的连接 getpeername() 得到连接在指定套接口上的对等通讯方的名字。 getsockname() 得到指定套接口上当前的名字。 getsockopt() 得到与指定套接口相关的属性选项。

基本套接口函数 recv()* 从一个已连接的套接口接收数据。 recvfrom()* 从一个已连接的或未连接的套接口接收数据。 send()* 从一已连接的套接口发送数据。 sendto()* 从已连接或未连接的套接口发送数据。 select()* 执行同步I/O多路复用。 setsockopt() 设置与指定套接口相关的属性选项。 Close() shutdown() 关闭一部分全双工的连接。

基本套接口函数 htonl() 把32位的数字从主机字节顺序转换到网络字节顺序。 htons() 把16位的数字从主机字节顺序转换到网络字节顺序。 inet_addr() 把一个Internet标准的"."记号地址转换成Internet地址数值。 inet_ntoa() 把Internet地址数值转换成带"."的ASCII字符串。 ioctlsocket() 为套接口提供控制。 listen() 监听某一指定套接口上连接请求的到来。 ntohl() 把32位数字从网络字节顺序转换为主机字节顺序。 ntons() 把16位数字从网络字节顺序转换为主机字节顺序。 *表示例程在应用于阻塞套接口时会阻塞。

数据库函数 2.2 数据库函数 Windows Sockets规范定义了如下数据库函数: gethostbyaddr()*   从网络地址得到对应的名字(有可能多个)和地址。 gethostbyname()*   从主机名得到对应的名字(有可能多个)和地址。 gethostname()      得到本地主机名。 getprotobyname()*   从协议名得到对应的协议名和协议号。 getprotobynumber()*   从协议号得到对应的协议名和协议号。 getservbyname()*   从一个服务的名字得到对应的服务名以及端口号。 getservbyport()*   从一个端口号得到对应的服务名以及端口号。  *表示例程在某些情况下可能会阻塞。

Winsock 2.3 针对Microsoft Windows的扩展函数   为了适用于Windows下的消息机制和异步的I/O选择操作,Windows Sockets API在功能上扩充了将近20个函数,其中扩充的部分均冠以前缀WSA(Windows Sockets Asynchronous)。本质上,这些扩展的API是为了应用程序能更好地处理基于消息的异步发送的网络事件。虽然基于Windows Sockets的编程并不强制要使用这个扩展的API集(WSAStartup()和WSACleanup()除外)但推荐应用程序开发者遵循Microsoft Windows的编程范例。 WSAAsyncGetHostByAddr()     获取对应于一个地址的主机信息(一个标准的Berkeley的getXbyY()函数集合的异步版本 )  WSAAsyncGetHostByName() 获取对应于一个主机名的主机信息(提供了一个标准Berkeley的gethostbyname()函数的异步基于消息的实现)  WSAAsyncGetProtoByName() 获取对应于一个协议名的协议信息(异步版本)  WSAAsyncGetProtoByNumber()获取对应于一个协议号的协议信息(异步)  WSAAsyncGetServByName() 获取对应于一个服务名的服务信息(异步)

Winsock WSAAsyncGetServByPort() 获取对应于一个端口号的服务信息(异步版本)  WSAAsyncSelect()            select()函数的异步版本。  WSACancelAsyncRequest()     取消一个未完成的WSAAsyncGetXByY()函数的实例。  WSACancelBlockingCall()     取消未完成的阻塞的API调用。  WSACleanup()           从底层的Windows Sockets DLL中撤销注册。  WSAGetLastError()           得到最近的一个Windows Sockets API调用错误的详细情况。  WSAIsBlocking()             确定底层的Windows Sockets DLL是否在该线程已经被一个调用阻塞。  WSASetBlockingHook()        为底层的Windows Sockets实现设置阻塞嵌入(hook)程序入口  WSASetLastError()           设置最近一次错误信息  WSAStartup()                初始化底层的Windows Sockets DLL  WSAUnhookBlockingHook()    恢复原始的阻塞嵌入(hook)处理程序

Winsock对Berkeley socket的扩充 异步选择机制 在windows sockets中提供了一组异步扩展函数,实现基于消息机制的网络通信编程,其中关键是提供了对网络事件基于消息的异步存取,其核心是异步选择函数WSAAsyncSelecet()。这个函数用来注册应用程序感兴趣的网络事件,当这些网络事件发生时,应用程序相应窗口函数将得到一个消息,应用程序根据该消息,利用条件判定语句进行判断,完成相应的操作。 WSAAsyncSelecet ()函数的原型为: int PASCAL FOR WSAAsyncSelect(SOCKET s,HWND hWnd,unsigned int wMsg,long lEvent); 参数含义:

Winsock对Berkeley socket的扩充 SOCKET s----应用程序申请到的套接字 hWnd---- 接收winsock消息的窗口句柄 wMsg----向窗口hWnd发出的消息的名称 lEvent----被注册的网络事件 功能描述: 即请求winsock.DLL在检测到套接字s上发生的某个网络事件IEvent时,向窗口hWnd发送一个消息wMSG,并自动地设置套接字处于非阻塞工作方式。其中的事件可以是一个或多个的组合。 通常事件包括允许读数据,写数据、连接、关闭等六种事件。 利用重载以下成员函数来处理各种网络事件。

Winsock对Berkeley socket的扩充 标记 事件 需要重载的函数 FD_READ 有数据到达时发生 void OnReceive( int nErrorCode ); FD_WRITE 允许数据发送时产生 void OnSend( int nErrorCode ); FD_OOB 收到外带数据时发生 void OnOutOfBandData( int nErrorCode ); FD_ACCEPT 有连接请求到达时发生 void OnAccept( int nErrorCode ); FD_CONNECT 作为客户端连接成功时发生 void OnConnect( int nErrorCode ); FD_CLOSE 套接口关闭时发生 void OnClose( int nErrorCode );

Winsock对Berkeley socket的扩充 lEvent可以是一种或多种网络事件的组合(需要多个网络事件的组合时通过OR操作符(|)来表示),例如,如果我们希望在套接字S上收到数据或允许发送数据时收到消息,这时函数的调用格式为: WSAAsyncSelect(s,hWnd,wMsg,FD_READ|FD_WRITE);

Winsock对Berkeley socket的扩充 异步请求服务   异步数据库函数允许应用程序用异步方式请求信息。某些网络实现和或配置,需要通过执行网络操作来应答这些请求。WSAAsyncGetXByY()函数允许应用程序开发者不必象在使用Berkeley标准函数时阻塞整个Windows环境。WSACancelAsyncRequest()函数可以允许一个应用程序取消任何未完成的异步的WSAAsyncGetXByY()请求。

Winsock对Berkeley socket的扩充 利用阻塞钩链进行阻塞处理 windows是一个异步操作系统,在windows内任何事件都是异步发生的,发生后,windows给程序启动此操作时指定的窗口函数发送一个消息,windows中对消息的处理用类似于下面的循环语句进行。 MSGmsg : While(GetMessage(&msg,NULL ,0 ,0 ) ) {  TranslateMessage (&msg) ; /* 翻译虚拟键码 */  DispatchMessage (&msg) ; } 在循环语句后通常编写一个消息处理过程(“钩子”(hook)例程)。

Winsock对Berkeley socket的扩充 在winsock中有一个默认的阻塞处理例程BlockingHook(…),这个处理例程是简单地获取并发送winsock消息。 对于要求更复杂的消息处理的应用程序应建立自已的处理过程用的钩子程序。为此在winsock的API中提供了WSASetBlockingHook(…)和WSAUnHookBlockingHook(…)两个函数,前者用于定义使用自已的阻塞钩子,后者用于恢复缺省钩子。 在编写阻塞处理例程时,除了可用WSACancelBlockingCall()函数外不能使用其它的winsock API函数。 winsock提供了两个检测和处理阻塞操作的函数:WSAIsBlocking(viod)和WSACancelBlockingCall(void)。 前者检查确定当前是否有阻塞操作,并返回布尔值;若有阻塞操作,应用程序可以进入阻塞操作处理;若有必要调用后者取消当前的阻塞操作

Winsock对Berkeley socket的扩充 错误处理 如果调用一个Winsock 函数时发生了错误情况,就可用WSAGetLastError函数来获得一个代码,这个代码明确地表明发生的错误情况。 WSAGetLastError 函数返回的这些错误都有预定义常量值,根据Winsock 版本的不同,这些值在Winsock .h或Winsock2.h中声明。

Windows Sockets 2新增函数一览 WSAAccept()                 accept()函数的扩展版本,它支持条件接收和套接口分组 WSACloseEvent()             释放一个事件对象。 WSAConnect()                connect()函数的扩展版本,它支持连接数据交 换和QOS规范 WSACreateEvent()            创建一个事件对象。 WSADuplicateSocket()        为一个共享套接口创建一个新的套接口描述字。 WSAEnumNetworkEvents()      检查是否有网络事件发生。 WSAEnumProtocols()         得到每个可以使用的协议的信息 WSAEventSelect()           把网络事件和一个事件对象连接 WSAGetOverlappedResu()      得到重叠操作的完成状态。 WSAGetQOSByName()           对于一个传输协议服务名字提供相应的QOS参数 WSAHtonl()                  htonl()函数的扩展版本。 WSAHtons()                  htons()函数的扩展版本。 WSAIoctl()                  ioctlsocket()函数的允许重叠操作的版本。

Windows Sockets 2新增函数一览 WSAJoinLeaf()               在多点对话中加入一个叶节点。 WSANtohl()                  ntohl()函数的扩展版本。 WSANtohs()                  ntohs()函数的扩展版本。 WSARecv()                   recv()函数的扩展版本。它支持分散/聚集I/O和重叠套接口操作 WSARecvDisconnect()     终止套接口的接收操作。如果套接口是基于连接的,得到拆除数据 WSARecvFrom()           recvfrom()函数的扩展版本。它支持分散/聚集I/O和重叠套接口操作 WSAResetEvent()         重新初始化一个数据对象。 WSASend()               send()函数的或者版本。它支持分散/聚集I/O和重叠套接口操作。 WSASendDisconnect()     启动一系列拆除套接口连接的操作,并且可以选择发送拆除数据。 WSASendTo()             sendto()函数的扩展版本。它支持分散/聚集I/O和重叠套接口操作。 WSASetEvent()           设置一个数据对象。 WSASocket()             socket()函数的扩展版本。它以一个PROTOCOL_INFO结构作为输入参数,并且允许创建重叠套接口。它还允许创建套接口组。 WSAWaitForMultipleEvents()  阻塞多个事件对象。

Winsock编程实例 参见WORD文档实例

Thank You!