西北工业大学网络编程技术重点.docx

上传人:b****2 文档编号:2464049 上传时间:2022-10-29 格式:DOCX 页数:22 大小:406.57KB
下载 相关 举报
西北工业大学网络编程技术重点.docx_第1页
第1页 / 共22页
西北工业大学网络编程技术重点.docx_第2页
第2页 / 共22页
西北工业大学网络编程技术重点.docx_第3页
第3页 / 共22页
西北工业大学网络编程技术重点.docx_第4页
第4页 / 共22页
西北工业大学网络编程技术重点.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

西北工业大学网络编程技术重点.docx

《西北工业大学网络编程技术重点.docx》由会员分享,可在线阅读,更多相关《西北工业大学网络编程技术重点.docx(22页珍藏版)》请在冰豆网上搜索。

西北工业大学网络编程技术重点.docx

西北工业大学网络编程技术重点

说明:

本人为西工大计算机学院本科生,这些内容均为本人总结,考试后证明内容还算全面,整理时间为2012.6

 

一、Socket定义、参数

Socket是通信双方之间的纽带,Socket可绑定网络应用程序、建立一次连接,并对连接进行唯一标识。

Socket提供了一个通信接口,应用程序在网络上发送、接收的信息都通过这个接口来实现。

Socket和文件句柄一样,是操作系统的资源。

SOCKETsocket(

intaf,//地址族

inttype,//套接字类型

intprotocol//特定的协议

);

二、Winsock常用函数、辅助函数

WindowsSockets的初始化和终止WSAStartup(),WSACleanup()

创建和释放套接字函数socket(),closesocket()

绑定套接字和地址结构bind(),listen(),accept(),connect(),sockaddr,sockaddr_in,in_addr

发送、接收数据send()、sendto(),recv()、recvfrom()

错误处理函数WSAGetLastError()

其他辅助函数htons(),htonl(),ntohs(),ntohl();,inet_addr(),inet_ntoa(),gethostbyname(),gethostbyaddr(),getservbyname()

三、数据结构(维护哪些数据)

1、WSADATA结构用来保存WSAStartup()返回的初始化信息

structWSAData{

  WORDwVersion;

  WORDwHighVersion;

  charszDescription[WSADESCRIPTION_LEN+1];

  charszSystemStatus[WSASYSSTATUS_LEN+1];

  unsignedshortiMaxSockets;

  unsignedshortiMaxUdpDg;

  char*lpVendorInfo;

};

2、sockaddr结构体表示通用的Winsock地址结构,针对各种通信域的套接字,存储它们的地址信息

structsockaddr{

u_shortsa_family;//地址族:

与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的设计思路

1.创建字节流套接字。

2.绑定本地服务器的网络地址。

3.调用listen函数,使套接字处于监听状态。

4.以绑定的套接字为参数,创建工作线程,

5.工作线程完成客户端的服务请求,关闭线程的套接字并结束线程。

方式4的设计思路

1.创建字节流套接字。

2.绑定本地服务器的网络地址。

3.调用listen函数,使套接字处于监听状态。

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/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1