《Visual-C++网络编程技术-02.ppt》由会员分享,可在线阅读,更多相关《Visual-C++网络编程技术-02.ppt(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、网络编程技术网络编程技术导入导入v电子教室软件主要功能是教师可以通过教师机程电子教室软件主要功能是教师可以通过教师机程序控制和管理学生机序控制和管理学生机 v教师机端控制程序能够主动扫描学生机,确定哪教师机端控制程序能够主动扫描学生机,确定哪些学生已经进入电子教室,是可控计算机些学生已经进入电子教室,是可控计算机 v本章通过简单的通信程序实现扫描局域网内可控本章通过简单的通信程序实现扫描局域网内可控计算机的功能计算机的功能 网络编程技术网络编程技术本章要点本章要点v扫描可控计算机功能实现分析扫描可控计算机功能实现分析vWinSock通信编程技术通信编程技术vMFC网络通信编程技术网络通信编程技
2、术网络编程技术网络编程技术扫描可控计算机功能需求分析扫描可控计算机功能需求分析v 教师机主动联系学生机,如果不能与学生机建立教师机主动联系学生机,如果不能与学生机建立联系,则说明学生机端没有运行该程序,该学生联系,则说明学生机端没有运行该程序,该学生机不在可控范围;反之,如果教师机与学生机成机不在可控范围;反之,如果教师机与学生机成功的取得了联系,则证明学生机已启动程序,处功的取得了联系,则证明学生机已启动程序,处于可控状态。于可控状态。v教师机扫描学生机时,应该可以设置扫描范围,教师机扫描学生机时,应该可以设置扫描范围,例如一个例如一个IP地址范围,教师机与范围内的所有学地址范围,教师机与范
3、围内的所有学生机逐一联系,判断其是否处于可控状态,将处生机逐一联系,判断其是否处于可控状态,将处于可控状态的学生机显示在教师机端的程序界面于可控状态的学生机显示在教师机端的程序界面上。上。 网络编程技术网络编程技术设计程序界面设计程序界面 网络编程技术网络编程技术关键技术分析关键技术分析v关键技术就是两台联网的计算机之间进行通信关键技术就是两台联网的计算机之间进行通信 v采用什么技术实现网络通信?采用什么技术实现网络通信?套接字(套接字(Socket) 网络编程技术网络编程技术WinSock进行面向连接通信编程进行面向连接通信编程网络编程技术网络编程技术WinSock实现基于实现基于TCP的客
4、户端的客户端/服务器通信服务器通信 v程序演示程序演示v程序源代码(见教材程序源代码(见教材P18)网络编程技术网络编程技术程序代码详解程序代码详解头文件和库文件头文件和库文件#include #pragma comment(lib,ws2_32.lib) 使用使用WinSock进行编程开发,需要头文件进行编程开发,需要头文件和库文件和库文件ws2_32.lib的支的支持。持。 网络编程技术网络编程技术程序代码详解程序代码详解 WSADATAv WSADATA wsaData; v if(ret=WSAStartup(MAKEWORD(2,2),&wsaData)!=0)vvprintf(初始
5、化初始化WinSock出错出错);vreturn 0;vv WSACleanup(); 网络编程技术网络编程技术程序代码详解程序代码详解 socketv调用调用Socket()函数可以建立套接字函数可以建立套接字v函数原型:函数原型:SOCKET socket( int af, int type, int protocol ) v参数参数af:套接字要使用的协议地址族,目前只提:套接字要使用的协议地址族,目前只提供供AF_INET表示使用互联网协议表示使用互联网协议(IP)地址。地址。v参数参数type:描述套接字的类型,只能是:描述套接字的类型,只能是SOCK_STREAM、SOCK_DGR
6、AM、SOCK_RAW 中的一个。中的一个。v参数参数protocol:该套接字使用的特定通信协定:该套接字使用的特定通信协定(如果使用者不指定则设为如果使用者不指定则设为0)。 网络编程技术网络编程技术程序代码详解程序代码详解bindv调用调用bind()函数为服务器端定义的监听套接字指函数为服务器端定义的监听套接字指定一个地址及监听端口定一个地址及监听端口(Port)vint bind( SOCKET s, const Struct sockaddr FAR *name, int namelen ); v参数参数s:未绑定的套接字的对象名。:未绑定的套接字的对象名。v参数参数name:套接
7、字的地址值,是个结构体。:套接字的地址值,是个结构体。v参数参数namelen:地址参数:地址参数name的长度。的长度。网络编程技术网络编程技术程序代码详解程序代码详解listenv listen函数在函数在TCP服务器端使用,通知协议内服务器端使用,通知协议内核用户进程准备接受接口上的连接请求核用户进程准备接受接口上的连接请求vint listen(SOCKET s, int backlog); v参数参数s:已绑定但尚未连接的套接字句柄,也是:已绑定但尚未连接的套接字句柄,也是由由socket()函数创建的套接字句柄。函数创建的套接字句柄。v参数参数backlog:待处理的连接队列的最大
8、长度。:待处理的连接队列的最大长度。当连接的客户数大于这个最大长度并且服当连接的客户数大于这个最大长度并且服 网络编程技术网络编程技术程序代码详解程序代码详解acceptvaccept函数在服务器端等待并接受客户的连接,函数在服务器端等待并接受客户的连接,该函数返回一个新的套接字,该套接字可以用来该函数返回一个新的套接字,该套接字可以用来与对方进行通信,而原先的套接字还是处于监听与对方进行通信,而原先的套接字还是处于监听状态。状态。 vint accept(SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen);v参数参数s:表示处于监听模
9、式的套接字句柄。:表示处于监听模式的套接字句柄。v参数参数addr:是:是SOCKADDR对象的地址。对象的地址。v参数参数addrlen:表示:表示addr参数的长度。参数的长度。网络编程技术网络编程技术程序代码详解程序代码详解send vsend函数发送数据函数发送数据vint send( SOCKET s, const char FAR *buf, int len, int flags );v参数参数s:表示已连接的本地套接字描述符。:表示已连接的本地套接字描述符。v参数参数buf:表示要发送的缓冲区数据。:表示要发送的缓冲区数据。v参数参数len:表示缓冲区的长度。:表示缓冲区的长度。
10、v参数参数flags:表示标志类型,可以为:表示标志类型,可以为0,MSG_DONTROUTE,MSG_OOB。 网络编程技术网络编程技术程序代码详解程序代码详解recv vrecv函数从函数从TCP连接的另一端接收数据连接的另一端接收数据 vint recv( SOCKET s, char FAR *buf, int len, int flags); v参数参数s:接收端套接字描述符。:接收端套接字描述符。v参数参数buf:指明一个缓冲区,用来存放接收到的:指明一个缓冲区,用来存放接收到的数据。数据。v参数参数len: buf的长度。的长度。v参数参数flags:表示标志,可以是:表示标志,
11、可以是0, MSG_PEEK, MSG_OOB。 一般置一般置0。 网络编程技术网络编程技术程序代码详解程序代码详解 connectvConnect函数完成通信的连接过程函数完成通信的连接过程vint connect(SOCKET s, const struct sockaddr FAR* name, int namelen); v参数参数s:表示是将要和服务器建立连接的套接字:表示是将要和服务器建立连接的套接字句柄。句柄。v参数参数name:服务器的地址结构:服务器的地址结构v参数参数namelen:地址名字:地址名字name的长度。的长度。网络编程技术网络编程技术MFC的的CSocket类
12、类 v微软的微软的MFC把复杂的把复杂的WinSock API函数封装到函数封装到类里,这使得编写网络应用程序更容易。类里,这使得编写网络应用程序更容易。v vMFC中的中的CAsyncSocket类逐个封装了类逐个封装了WinSock API vCSocket类是由类是由CAsyncSocket继承而来,继继承而来,继承了它封装的承了它封装的WinSock API 网络编程技术网络编程技术CSocket类实现网络通信编程过程类实现网络通信编程过程 v 构造一个构造一个CSocket对象。对象。 v 使用这个对象的使用这个对象的Create()成员函数产生一个成员函数产生一个socket对对象
13、。在客户方程序中,除非需要数据报套接字,象。在客户方程序中,除非需要数据报套接字,Create()函数一般情况下应该使用默认参数。而对于服函数一般情况下应该使用默认参数。而对于服务方程序,必须在调用务方程序,必须在调用Create时指定一个端口。时指定一个端口。v 如果是客户方套接字,则调用如果是客户方套接字,则调用Connect()函数与服务方函数与服务方套接字连接;如果是服务方套接字,则调用套接字连接;如果是服务方套接字,则调用Listen()开开始监听来自客户方的连接请求,收到连接请求后,调用始监听来自客户方的连接请求,收到连接请求后,调用Accept()函数接受请求,建立连接。函数接受
14、请求,建立连接。v 连接成功建立后,可以使用连接成功建立后,可以使用Receive()和和Send()函数函数进行数据发送和接收工作。进行数据发送和接收工作。v 通信结束后,使用通信结束后,使用Close()函数销毁函数销毁CSocket对象。对象。 网络编程技术网络编程技术CSocket类实现的面向连接的套接字通信过程类实现的面向连接的套接字通信过程 网络编程技术网络编程技术代码详解代码详解头文件头文件v#include 头文件头文件afxsock.h中包含中包含 CAsyncSocket 和和 CSocket 类定义。类定义。网络编程技术网络编程技术代码详解代码详解 Create函数函数v
15、 BOOL Create(UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE, LPCTSTR lpszSocketAddress = NULL); v 参数参数nSocketPort:与套接字一起使用的端口号,默认:与套接字一起使用的端口号,默认值为值为0,表示自动选择端口号。,表示自动选择端口号。v 参数参数nSocketType:指定要创建的套接字类型,默认为:指定要创建的套接字类
16、型,默认为流式套接字。流式套接字。v 参数参数lEvent:指定感兴趣的网络事件的掩码位。:指定感兴趣的网络事件的掩码位。v 参数参数lpszSocketAddress:指定套接字的网络地址。:指定套接字的网络地址。 网络编程技术网络编程技术代码详解代码详解 Listen函数函数vBOOL Listen(int nConnectionBacklog = 5); v参数参数nConnectionBacklog:指定连接请求队:指定连接请求队列的最大连接数目,默认为列的最大连接数目,默认为5。 网络编程技术网络编程技术代码详解代码详解Accept函数函数vvirtual BOOL Accept (
17、CAsyncSocket & rConnectedSocket, SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL) ; v参数参数rConnectedSocket:用来进行连接的新:用来进行连接的新套接字的引用。套接字的引用。v参数参数lpSlpSockAddr:用来返回发送连接请求:用来返回发送连接请求的套接字地址的的套接字地址的SOCKADDR结构指针。结构指针。v参数参数lpSockAddrLen:指向:指向pSockAddr结构结构中地址的字节长度的指针。中地址的字节长度的指针。 网络编程技术网络编程技术代码详解代码详解 C
18、onnect函数函数vBOOL Connect (LPCTSTR lpszHostAddress, UINT nHostPort); v参数参数lpszHostAddress:用于要连接的服务器:用于要连接的服务器网络地址。网络地址。v参数参数nHostPort:指定套接字应用程序使用的:指定套接字应用程序使用的端口号。端口号。网络编程技术网络编程技术代码详解代码详解Receive函数函数vvirtual int Receive(void* lpBuf, int nBufLen, int nFlags = 0); v参数参数lpBuf:接收数据的缓冲区。:接收数据的缓冲区。v参数参数nBufL
19、en:缓冲区的字节节长度。:缓冲区的字节节长度。v参数参数nFlags:用来表示函数的实现,默认为:用来表示函数的实现,默认为0。 网络编程技术网络编程技术代码详解代码详解Send函数函数vvirtual int Send(const void* lpBuf, int nBufLen, int nFlags = 0); v参数参数lpBuf:要发送的数据的缓冲区地址。:要发送的数据的缓冲区地址。v参数参数nBufLen:lpBuf缓冲区的字节长度。缓冲区的字节长度。v参数参数nFlags:指定函数的调用标志,默认值为:指定函数的调用标志,默认值为0。网络编程技术网络编程技术代码详解代码详解Cl
20、ose函数函数v该函数用来关闭套接字并释放该函数用来关闭套接字并释放Socket描述符,描述符,其函数原型为:其函数原型为:vVirtual void Close ( ) ; 网络编程技术网络编程技术扩展核心程序扩展核心程序 v首先建立两个应用程序,一个首先建立两个应用程序,一个teacher和一个和一个student。vstudent程序应首先启动,程序应首先启动,teacher程序能够主程序能够主动向所有动向所有student程序发出连接请求程序发出连接请求v能够成功建立连接的学生机就是可控学生机,把能够成功建立连接的学生机就是可控学生机,把其其IP地址显示在地址显示在teacher程序界面上。程序界面上。 网络编程技术网络编程技术本章技能训练实例本章技能训练实例 v实验题目:实验题目:简单的考试报名系统实现v实验目的:实验目的:掌握使用Socket进行通信的基本方法和简单控件编程v实验内容:实验内容:开发一个服务器端程序,能够接收客户端发来的信息;开发一个客户端程序,能够将信息发送给服务器端,可采用CSocket编程,也可以用WinSock编程。