西北工业大学网络编程技术重点Word格式文档下载.docx
《西北工业大学网络编程技术重点Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《西北工业大学网络编程技术重点Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。
![西北工业大学网络编程技术重点Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-11/24/ee6a4b6d-c22d-4f81-a3e6-b145399241c3/ee6a4b6d-c22d-4f81-a3e6-b145399241c31.gif)
与socket()的第一个参数相同含义
charsa_data[14];
//协议地址,内容因具体协议而不同
};
3、sockaddr_in结构体指定Internet通信域的地址结构
structsockaddr_in{
shortsin_family;
//必须为AF_INET
u_shortsin_port;
//端口
structin_addrsin_addr;
//IP地址
charsin_zero[8];
四、基于TCP协议的Socket编程模型
五、C/S端基本思路
服务器程序需执行:
1初始化套接字接口,调用套接字动态链接库。
2创建套接字并将其与本机网络地址结构绑定。
3让程序处于监听状态,监听客户机的连接请求。
4若有连接请求,则处理并建立连接;
若未有连接请求,则阻塞并等待连接请求。
5接收或发送数据。
6关闭套接字。
7注销套接字接口,释放套接字动态链接库所占用资源。
客户机程序需执行:
8初始化套接字接口,调用套接字动态链接库。
9创建套接字。
10向服务器发送连接请求。
11接收或发送数据。
12关闭套接字。
13注销套接字接口,释放套接字动态链接库所占用资源。
六、基于UDP协议的Socket编程模型(两种)
模型
(一)的特点:
1、应用程序双份是对等的。
使用数据报套接字通信时都经过6个阶段:
2、双方必须确切地知道对方的网络地址,且将约定好的自己的网络地址绑定到自己的套接字上。
3、每次发送或接收数据报时,所使用的sendto()和recvfrom()中要包括对方的网络地址信息。
4、recvfrom()在没有收到数据前,默认情况下会阻塞,程序不向下执行。
模型
(二)的特点:
1、应用程序双份是不对等的。
服务器要先行启动,处于被动的等待访问状态;
客户机则可随时主动请求访问服务器。
2、完成一次通信时服务器要经过6个阶段:
而客户机不需要绑定套接字。
3、服务器将套接字绑定到周知的端口或指定的端口,且客户机必须确切地知道服务器端套接字使用的网络地址。
4、客户机套接字使用动态分配的自由端口,不需要进行绑定。
服务器事先不必知道客户机套接字使用的网络地址。
5、客户机必须先发送数据报,服务器收到后才能知道客户机的地址,才能给客户机回送数据报。
七、多线程,阻塞,非阻塞模式优缺点
1、阻塞模式:
优点:
1、I/O操作工作情况确定,包括调用、等待和返回三个阶段。
2、大部分情况下,操作都能成功完成,易编程实现。
缺点:
若需要建立多个套接字连接来为多个客户机服务时,或收发数据量不均衡时,或I/O时间不确定时,该模式性能低下,甚至无能为力。
解决方法:
使用多线程机制,并发运行为多个客户机服务。
2、非阻塞模式:
不会过多地占用CPU的控制权,及时释放系统资源。
编程时需要编写更多的代码,以把握成功调用I/O函数的时机。
I/O操作的随机性大,难以操作。
需要详细分析每次调用收到的WSAEWOULDBLOCK错误,采取相应的对策。
解决办法:
使用5种“套接字I/O模型”,通过异步的方式对一个或者多个套接字上进行的通信加以管理。
八、进程、线程概念
进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
线程(Thread)是进程的一个实体,是CPU调度和分派的基本单位。
九、多线程编程使用函数、定义、作用
1、工作线程函数
UINTThreadFunction(LPVOIDpParam)
{
//线程处理代码
While
(1)
//处理
}
return0;
2、创建线程函数CreateThread()
HANDLECreateThread(
LPSECURITY_ATTRIBUTESlpThreadAttributes,
SIZE_TdwStackSize,
LPTHREAD_START_ROUTINElpStartAddress,
LPVOIDlpParameter,
DWORDdwCreationFlags,
LPDWORDlpThreadId
函数的功能:
一个进程的主线程是由操作系统自动生成的。
若要让一个主线程创建额外的子线程,则可以通过调用CreateThread()函数完成。
终止线程函数
3、终止线程的四种方式:
1)线程内部调用ExitThread()函数退出当前线程的执行。
函数功能:
线程内部调用该函数,退出线程执行。
函数定义:
voidExitThread(DWORDdwExitCode);
2)在线程外部利用线程句柄调用TerminateThread()函数强行终止一个线程的运行。
在线程外部调用该函数,强制终止线程运行。
函数的定义:
BOOLTerminateThread(
HANDLEhThread,
DWORDdwExitCode
3)工作线程函数正常返回(隐含调用ExitThread()函数)。
这是确保所有线程资源被系统正确回收的最佳方法。
4)包含线程的进程终止运行。
当整个进程已经正常终止,则进程内部线程所使用的资源已被系统正常回收。
4、挂起与恢复线程函数
挂起线程函数:
DWORDSuspendThread(HANDLEhThread)
恢复线程函数:
DWORDResumeThread(HANDLEhThread)
激活线程,恢复线程工作。
函数执行时,会检查线程的挂起次数,若挂起次数为0,表明该线程不处于挂起状态,否则该线程挂起次数值将减1。
5、睡眠线程函数:
voidSleep(DWORDdwMilliseconds)
线程使用sleep()函数睡眠,在睡眠时间内不被系统调度。
十、线程通信:
多线程Socket编程设计思路
方式2的设计思路
1.创建字节流套接字。
2.绑定本地服务器的网络地址。
3.调用listen函数,使套接字处于监听状态。
4.接收外来连接请求,accept函数返回新套接字。
5.与客户端进行数据交互。
6.关闭套接字,返回步骤4。
关闭操作可能由以下任意一种情况引发:
▪数据传输完毕,服务器主动关闭连接。
▪客户机已关闭连接。
▪服务器接收数据超时。
方式3的设计思路
4.以绑定的套接字为参数,创建工作线程,
5.工作线程完成客户端的服务请求,关闭线程的套接字并结束线程。
方式4的设计思路
4.以绑定的套接字为参数,创建第一个工作线程,
5.第一个工作线程处理客户机的连接请求,然后再创建第二个工作线程与客户机传输数据。
十一、*基于I/O模型的Socket编程,五种I/O模型及特点,基本概念使用效率分析比较
1、Select模型又称为选择模型,它可以使WindowsSockets应用程序同时对多个套接字进行管理,调用select()函数可以获取指定套接字的状态。
然后调用SocketAPI实现数据发送和接收等操作。
能够从单个线程的多个套接字上进行多重连接及I/O操作。
select()函数中使用集合来管理多个套接字。
默认情况下,套接字集合中包含64个元素,最多可以管理的套接字数量为1024个。
尽管Select模型可以同时管理多个连接,但对集合的管理比较繁琐。
每次在使用套接字发送和接收数据之前,都需要调用select()函数判断套接字的状态,这会导致CPU额外的负担,从而影响应用程序的工作效率。
2、WSAAsyncSelect模型又称为异步选择模型,它为每个套接字绑定一个消息。
当套接字上出现事先设置事件时,操作系统会给应用程序发送这个消息,从而使应用程序可以对该事件做相应的处理。
在系统开销不大的情况下可以同时处理许多个客户端连接。
即使应用程序不需要窗口,也要至少设计一个窗口用于处理套接字事件。
而且,在一个窗口中处理大量的事件也可能成为性能瓶颈。
3、WSAEventSelect模型又称为事件选择模型,它允许在多个套接字上接收以事件为基础的网络事件通知。
应用程序在创建套接字后,调用WSAEventSelect()函数将事件对象与网络事件集合相关联。
当网络事件发生时,应用程序以事件的形式接收网络事件通知。
4、重叠I/O模型又称为OverlappedI/O模型,基本设计原理是可以让应用程序使用重叠的数据结构一次投递多个I/O请求,当系统完成I/O操作后通知应用程序。
重叠I/O模型是真正意义上的异步I/O模型。
在应用程序中调用输入/输出函数后,程序将立即返回。
当I/O操作完成后,系统会通知应用程序。
5、完成端口(Completionport)是一种在Windows服务平台上比较成熟和高效的I/O操作方法,它使用线程池处理异步I/O请求。
利用完成端口模型,应用程序可以管理成百上千个套接字。
十二、针对五种模型的编程思路
1、基于Select模型的Socket编程思路
1.初始化WindowsSockets环境。
2.创建用于监听的套接字ListenSocket。
3.将套接字ListenSocket绑定到本地地址的9990端口。
4.开始监听。
5.将套接字ListenSocket设置为非阻塞模型。
6.将套接字ListenSocket添加到SocketArray数组中。
7.服务器程序,需要始终运行,接收和处理来自客户端的请求都包含在一个While(TRUE)循环中:
1程序首先将当前所有的套接字(包括监听套接字ListenSocket和稍后创建的与每个客户端进行通信的套接字)添加到ReadSet和WriteSet集合中,然后调用select()函数判断这些套接字是否处于读/写就绪状态。
2当套接字ListenSocket处于读就绪状态时,说明有来自客户端的连接请求需要处理。
如果其他套接字处于读就绪状态,说明有来自已连接客户端的数据。
3依次对数组SocketArray中所有的套接字进行判断,并对处于读就绪状态(在ReadSet集合中)的套接字进行处理。
4程序调用FD_ISSET()函数来判断指定的套接字是否在ReadSet集合中。
如果套接字ListenSocket在ReadSet集合中,则调用accept()函数接收来自客户端连接请求,得到与客户端进行通信的套接字AcceptSocket,并将其添加到SocketArray数组中;
如果其他套接字在ReadSet集合中,则接收数据。
5如果指定的套接字在WriteSet集合中,并且该套接字接收到的数据量大于其发送的数据量,则发送数据
。
2、基于WSAAsyncSelect模型的Socket编程思路
1创建窗口。
2初始化WindowsSockets环境。
3创建套接字。
4用WSAAsyncSelect()函数定义使用Window窗口接收FD_ACCEPT事件消息。
5设置并绑定地址和端口,监听指定的套接字。
6循环获取消息队列中的消息,将消息分派到窗口例程进行处理。
7判断消息类型:
a)如果触发了FD_ACCEPT事件,则程序接收来自客户端的请求,得到与客户端通信的套接字,并为该套接字订阅FD_READ、FD_WRITE和FD_CLOSE消息。
b)如果触发了FD_CLOSE事件,则关闭套接字,释放其占用的资源。
c)如果触发了FD_READ事件,则调用recv()函数接收来自客户端的请求。
d)如果触发了FD_WRITE事件,则调用send()函数向客户端发送数据。
3、基于WSAEventSelect模型的服务器程序设计思路
(1)初始化WindowsSockets环境,并创建用于监听的套接字。
(2)创建事件对象。
(3)将新建的事件对象与监听套接字相关联,并注册该套接字关注的网络事件集
合,通常为FD_ACCEPT和FD_CLOSE。
(4)等待所有事件对象上发生注册的网络事件,并对网络事件进行处理。
(5)如果触发了FD_ACCEPT事件,则程序接收来自客户端的请求,得到与客户端通
信的套接字,并为该套接字创建相关联的事件对象,注册该套接字关注的网络
事件集合,通常为FD_READ、FD_CLOSE和FD_WRITE。
(6)如果触发了FD_CLOSE事件,则关闭套接字,释放其占用的资源。
(7)如果触发了FD_READ事件,则调用recv()函数接收来自客户端的请求。
(8)如果触发了FD_WRITE事件,则调用send()函数向客户端发送数据。
4、基于重叠I/O模型的服务器程序设计思路
1创建一个套接字,开始在指定的端口上监听连接请求。
2接受一个客户机的连接请求。
3建立并初始化重叠结构WSAOVERLAPPED。
4以WSAOVERLAPPED结构为参数,在套接字上投递WSARecv请求。
5用WSAWaitForMultipleEvents函数等待重叠操作返回的结果。
6使用WSAResetEvent函数重设当前这个用完的事件对象。
7使用WSAGetOverlappedResult函数取得重叠调用的返回状态。
8服务器程序进一步处理接收到的数据。
9同第5步一样,在套接字上继续投递WSARecv请求,重复步骤6~9。
5、基于完成端口模型的服务器应用程序的设计思路:
1创建完成端口对象。
2创建n个工作线程,n等于当前计算机中CPU核心的数量。
将新建的完成端口对象作为参数传递到工作线程中。
工作线程的主要功能是检测完成端口的状态,如果有来自客户端的数据,则接收数据,并将接收到的数据发送回客户端程序。
3初始化WindowsSockets环境,创建用于监听的套接字,并将其绑定到本地地址的端口。
4监听来自客户端的连接请求。
5接收来自客户端的连接请求,得到与客户端进行通信的套接字AcceptSocket,并将该套接字与步骤
(1)中创建的完成端口对象相关联。
6以异步方式在套接字AcceptSocket上接收数据。
这里只是执行接收数据的操作,真正接收数据是在工作线程中完成的。
十三、原始套接字与标准套接字的区别
原始套接字置根于操作系统的网络核心。
标准套接字(字节流套接字和数据报套接字)悬浮于TCP和UDP协议的外围
十四、原始套接字编程模型Ping程序sniffer
1、利用原始套接字实现Ping程序
1)创建原始套接字,设定协议为IPPROTO_ICMP。
2)创建并初始化ICMP头。
3)调用setsockopt函数对socket属性选项进行设置。
4)调用sendto函数将ICMP请求发给目的主机。
5)调用recvfrom函数接收任何ICMP响应。
若到达目的主机,会回发一条回应答复消息。
若未到达目的主机,则由中间路由回发一条错误消息。
若到达目的主机,但未做出响应,则超时。
2、利用RawSocket实现网络嗅探(sniffer)
1)让网卡进入混杂模式并建立和设置原始套接字为亲自处理报头。
2)接收IP数据包。
3)解析IP数据包,对IP包的协议类型进行判断:
若是ICMP包,则进一步解析ICMP包。
若是TCP包,则进一步解析TCP包。
若是UDP包,则进一步解析UDP包。
4)捕获的数据更深入解析。
十五、底层网络:
网络数据包捕获原理
以太网具有共享性质的特征,信息是以明文的形式在网络上传输,当网络适配器设置为监听模式(混杂模式)时,由于采用以太网广播信道争用的方式,使得监听系统与正常通信的网络能够并联连接,并可以捕获任何一个在同一冲突域上传输的数据包。
IEEE802.3标准的以太网采用的是持续CSMA的方式,正是由于以太网采用这种广播信道争用的方式,使得各个站点可以获得其他站点发送的数据。
十六、*WinPcap编程模型
十七、NDIS编程(基本概念)
NDIS(NetworkDriverInterfaceSpecification)是一种网络驱动接口规范,在核心态下工作。
给数据交换出了一个灵活的环境,传输协议可用它与网卡驱动程序进行通信。
所有的网络通信最终必须通过NDIS完成,所以这是网络数据拦截的良好位置。
十八、ASP与ASP.NET的优缺点分析
ASP的优点:
自动编译、带有动态内容的Web页、ASCII文本发送给客户端浏览器、源代码不可访问
ASP的缺点
仅两种非类型语言:
VBScript和JavaScript
ASP页需要解释
代码、HTML和文本的混合,象意大利面条一样
使用同一文件
额外的功能代码
代码不能重用
没有调试机制
先关闭Web服务器才能安装新版本的DLL
ASP.NET的优点:
支持强类型语言,如C#、VB
编译页可改进执行速度
内置方法Trace可以帮助调试页
提供声明性服务器控件
通过继承机制支持代码的重用。
ASP代码与HTML设计和文本分离
无需注册组件
十九、*ASP.NET的6个对象以及每个对象的功能和作用
Page对象
Page对象由System.Web.UI中的Page类实现,该类与.aspx文件相关联。
这些文件在运行时被编译为Page对象,并缓存在服务器内存中。
每个.aspx文件对应一个Page对象。
.aspx与后台代码类(局部类)合并生成页面类。
Page对象是页面类的实例。
Response对象
在页面输出要显示的内容,重定向
Request对象
获得页面输入,URL传参,Form表单提交
Application对象
Application对象是由System.Web.HttpApplicationState类实现的,主要维护应用程序状态,与应用程序的生命周期有关。
在客户端第一次从某个特定的ASP.NET应用程序虚拟目录中请求任何URL资源时创建,在应用程序或进程被撤销时结束。
Session对象
Session对象的主要作用是在服务器端存储特定信息,这些信息都是局部的,是特定于某一个用户的。
Session中的信息也被称为会话状态。
Session对象可以实现在网站内部不同页面之间共享信息,但共享的信息属于特定用户。
在浏览器第一次请求应用程序的某个页面时,会话开始;
在会话超时或被关闭时,会话结束。
Server对象
Server对象由HttpServerUtility类实现,该对象专门为处理服务器上的特定任务而设计。
对应了一组方法用于实现相应功能。
二十、Web控件的分类:
标准、复杂、验证、数据
二十一、课中所讲控件的功能、特点、作用。
控件常用属性
1、文本输入控件
文本框为用户提供了一种向Web窗体页中输入信息(包括文本、数字和日期)的方法。
主要属性有:
TextMode、Text、ID
2、控制转移控件
控制转移控件主要作用是在不同页面之间响应。
常用的有四种,分别是:
Button、ImageButton、LinkButton、HyperLink
3、选择控件
单选框一般成组出现,用于接受用户多选一的输入方式。
要求用户必须并且只能选择一个。
常用属性包括:
Text、ID、Checked、GroupName
复选框一般有两种常见应用,一是用于获取用户是否同意信息,二是一组复选框向用户提供选择项,从而接受用户复选。
Text、ID、Checked
4、列表控件
下拉列表DropDownList实现的列表选择是多选一的选择方式,主要应用的属性有:
Items选项集合、SelectedIndex、SelectedItem、AutoPostBack
二十二、*ADO.NET编程,连接与非连接程序设计思路
连接式:
采用Command对象和DataReader对象相结合的方式进行数据访问、操作。
Command对象作用:
对数据库执行SQL语句或存储过程,对数据库进行查询、增删改操作。
DataReader对象作用:
提供对数据只读的、向前的数据读取方式,不能修改数据库,且一条记录读过后,不能再重读一次。
非连接式:
二十三、数据适配器、数据集、数据控件、数据绑定的基本概念
数据适配器:
vDataAdapter:
它起着桥梁的作用,在DataSet和其源数据存储区之间进行数据检索和保存。
vDataAdapter对象可以隐藏和Connection、Command对象沟通的细节,通过DataAdapter对象建立、初始化DataTable,从而和DataSet对象结合起来在内存存放数据表副本,实现离线式数据库操作。
数据集:
•