《VC++程序设计》第9讲 Winsock网络编程.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:80 大小:262KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

《VC++程序设计》第9讲 Winsock网络编程.ppt

《VC++程序设计》第9讲Winsock网络编程.ppt

预览

免费试读已结束,剩余 70 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第9讲WindSock网络编程第9讲WinSock网络编程9.1网络通信基础计算机网络两台计算机通过网络进行通信IP地址协议网络的状况网络异质性问题的解决ISO/OSI七层参考模型ISO/OSI七层参考模型对等通信示例对等层通信的实质OSI各层所使用的协议数据封装数据封装TCP/IP模型TCP/IP与OSI参考模型的对应关系端口9.2WinSock概述WindowsSockets通信机制客户机/服务器模式客户机/服务器模式基于TCP(面向连接)的socket编程9.3MFCWinSock编程9.3MFCWinSock编程9.3.1MFCWinSock类CAsyncSocket类主要成员函数及其功能(一)CAsyncSocket类主要成员函数及其功能(二)CAsyncSocket类主要成员函数及其功能(三)CSocket类主要成员及其功能9.3.2WinSock初始化9.3.3Socket的创建、连接与关闭使用Socket对象之前,必须调用它的Create函数创建Socket。如果准备用Socket连接另一个应用程序,作为客户程序,不必给Create函数传送任何参数。而如果Socket作为服务程序,准备监听另一个应用程序的连接请求,则至少需要传送一个端口给Create函数:if(m_sock.Create(5800)){……//Socket创建成功后的代码}else……//错误处理代码Create函数的其他参数还有很多,可以包括Socket类型、准备响应的事件以及Socket的本地的IP地址等,一般情况下取默认值即可。2.Socket连接建立Socket对象后,就可以创建一个连接,共需要以下3个步骤:(1)在服务器端让Socket调用listen()函数,监听对方的连接请求。(2)在客户端通过调用Connect()函数连接服务器。(3)在服务器通过调用Accept()函数接受连接请求。(1)在服务器端让Socket调用listen()函数,监听对方的连接请求。listen()函数的调用方式如下:if(m_sock.listen()){……//Socket监听成功后的代码}else……//错误处理代码(2)在客户端通过调用Connect()函数连接服务器。使用Connect()函数连接服务器必须传达两个参数:连接的计算机名或IP地址和端口号。Connect()函数的调用方式如下:if(m_sock.Connect(“127.0.0.1”,5802));{……//Socket连接成功后的代码}else……//错误处理代码(3)一旦服务器监听到连接请求,CAsycnSocket类就激活OnAccept()事件,让应用程序知道已有连接请求,则服务器端必须调用Accept()函数接受连接请求。Accept()函数调用成功,将创建另一个Socket,通过它与对方应用程序连接。Accept()函数的调用方式如下:if(m_sock.Accept(m_sock2));//等待连接请求{……//连接请求成功后的代码}else……//连接请求失败后的代码m_sock2和客户方建立了连接,以后就通过这个m_sock2对象去和客户方进行通信,而监听Socketm_sock仍然继续在监听,一旦又有一个客户方要连接服务方,OnAccept()又会被调用一次。m_sock2是和客户方通信的服务方,它不会触发OnAccept()事件,因为它不是监听Socket。3.关闭Socket连接在应用程序之间的通信完成之后,就可以调用Close()函数关闭这个连接。如下:m_sock.close();9.3.4数据的发送与接收1.发送通过Socket连接发送请求,可以使用Send()函数,该函数的原型如下:intCAsynSocket::Send(constvoid*lpBuf,intnBufLen,intnFlags=0);各参数含义如下:lpBuf:指向发送数据缓冲区的指针。数据为CString变量时,可使用LPCTSTR操作符把CString变量作为缓冲区传送。nBuflen:指明缓冲区要发送数据的长度。nFlags:该参数是可选的,用于控制消息的发送方式。函数执行成功,返回发送到对方应用程序的数据总量。如果有错误产生,函数返回SOCKET_ERROR。典型的Send()函数调用方式如下:charstr[1000];intilen;intiSend;iLen=str.GetLength();iSend=m_sock.Send(LPCTSTR(str),iLen);if(iSend==SOCKET_ERROR){……//发送不成功错误处理代码}else