欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    通信专业《TCPIP技术》实验指导书.pdf

    • 资源ID:46684432       资源大小:302.02KB        全文页数:38页
    • 资源格式: PDF        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    通信专业《TCPIP技术》实验指导书.pdf

    TCP/IP 技术 实 验 指 导 书 实 验 指 导 书 钱 萍 编 写 适用专业:通信工程 江苏科技大学_计算机科学与工程_学院 2011 年 1 月 前前 言言 本课程是通信工程专业的一门专业课。通过学习主要使学生系统地了解 TCP/IP 协议工作原理及应用、Internet 技术和应用知识,掌握网络编程的基本技能,学会网络应用程序的开发,将所学通信原理和计算机网络的基础理论知识融会贯通,初步掌握运用 TCP/IP。为了加深和巩固学生对理论知识的理解,增强学生在网络编程方面的实际动手能力的培养,使学生能运用VC+为开发工具编程解决网络通信中的实际问题,进行一些简单的网络应用程序设计。本课程设置了六个实验,具体实验项目为:(1)实验一 网络应用程序基础;(2)实验二 基于 TCP 协议的客户/服务器通信程序;(3)实验三 WinInet 实现 FTP 客户端;(4)实验四 简易聊天系统的实现;(5)实验五 电子邮件程序的设计与实现;(6)实验六 PING 程序的设计及实现。其中实验一到实验四是必开实验,实验五到实验六是选开实验。1目目 录录 前 言.0 实验一:网络应用程序基础.1 实验二:基于TCP协议的客户/服务器通信程序.8 实验三:WinInet实现FTP客户端.14 实验四 简易聊天系统的实现.22 实验五 电子邮件程序的设计与实现.29 实验六 PING程序的设计及实现.32 2实验一:网络应用程序基础实验一:网络应用程序基础 实验学时:2 学时 实验类型:综合 实验要求:必修 一、实验目的一、实验目的 通过在 SDK 模式下完成数据通信的过程,掌握 Windows Socket的常用函数的形式和使用方法,理解数据通信的过程。二、实验内容二、实验内容 1.Winsock 的启动与终止。2.Winsock 的创建及绑定和关闭。3.建立通信连接 listen 及 accept 和 connect。4.数据的传输。5.简单的客户机/服务器之间的通信。三、实验原理、方法和手段三、实验原理、方法和手段 1.Windows Sockets 的概念 Windows Sockets 顾名思义,它就是在 Windows 环境下使用的一套网络编程机制(或规范),常常简称为 Winsock。该规范是在Windows 操作系统下得到广泛应用的、开放的、支持多种协议的网络编程接口。已经成为 Windows 环境下网络编程事实上的标准。2.套接口的概念 套接口可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点,这个端点是一个逻辑上的概念。通信时其中的一个网络应用程序将要传输的一段信息写入它所在主机的1 Socket 中,该 Socket 通过与网络接口卡(Network Interface Cards,NIC)相连的传输介质将这段信息发送到另外一台主机的 Socket中,使这段信息能传送到其他程序中。3.Winsock 函数(1)WSAStartup()在调用任何一个 Winsock API 函数之前,都必须先检查协议栈的安装情况,也就是检查系统中是否有Windows Sockets的实现库。通过调用 WSAStartup()函数便可检测系统中有没有一个或多个Windows Sockets 的实现,本函数必须是应用程序或 DLL 调用的第一个 Windows Sockets 函数,它允许应用程序或 DLL 指明 Windows Sockets API 的版本号及获得特定 Windows Sockets 实现的细节。函数格式:int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);(2)socket()应用程序在使用套接口通信之前,必须要拥有一个套接口。在 Winsock 中,要使用 socket()或 WSASocket()函数来给一个网络应用程序创建一个套接口。函数格式:在 Winsock 1 中提供的格式是:SOCKET socket(int af,int type,int protocol);(3)bind()当用 socket()创建了一个套接口后,该套接口还是不能直接使用的,因为它只存在于一个名字空间(地址族)中,也就是说它只确定了通信所希望使用的服务类型,并没有与该主机上提供服 2务的某端口联系在一起,这样的套接口可以叫未命名的套接口。bind()函数通过给一个未命名的套接口分配一个本地名字,来为套接口建立本地绑定(即把一个套接口与一个主机地址和端口号联系起来)。本函数适用于数据报或流类套接口。函数格式:int bind(SOCKET s,const struct sockaddr FAR*name,int namelen);(4)listen()当在一个服务器端程序中,用 socket()函数成功创建了一个套接口,并用 bind()函数和一个指定的地址关联(即绑定)在一起后,就要指示该套接口进入监听连接请求的状态,可以接收由客户端发出的连接请求,这时就要用 Winsock API 函数 listen()。函数格式:int listen(SOCKET s,int backlog);(5)connect()在客户端当套接口建立好之后,就要调用 connect()函数,提出与一个服务器建立连接的请求,如果服务器接受请求,就可以在服务器的远程套接口与客户端的本地套接口之间建立一条连接。函数格式:在 Winsock 1 中提供的格式是:int connect(SOCKET s,const struct sockaddr FAR*name,int namelen);(6)accept()在服务器端通过 listen()函数调用表示服务器进入监听客户的 3连接请求状态,而在服务器端调用 accept()函数表示可以接收来自客户端由 connect()发出的连接请求。函数格式:在 Winsock 1 中提供的格式是:SOCKET accept(SOCKET s,struct sockaddr FAR*addr,int FAR*addrlen);(7)send()或 WSASend()在已经建立连接的套接口上发送数据,可以使用 send()或WSASend()函数。函数格式:在 Winsock 1 中提供的格式是:int send(SOCKET s,const char FAR*buf,int len,int flags);(8)recv()函数或 WSARecv()对于已建立连接的套接口来说,要从套接口上接收数据,就要使用 recv()函数或 WSARecv()。函数格式:在 Winsock 1 中提供的格式是:int recv(SOCKET s,char FAR*buf,int len,int flags);(9)recvfrom()函数或 WSARecvfrom()对于无连接的套接口来说,要从套接口上接收一个数据报并保 存 发 送 数 据 的 源 地 址,就 要 使 用recvfrom()函 数 或WSARecvfrom()函数。在 Winsock 1 中提供的格式是:int recvfrom(SOCKET s,char FAR*buf,int len,int flags,struct sockaddr FAR*from,int FAR*fromlen);4(10)sendto()函数或 WSASendTo()对于无连接的套接口来说,要从套接口上发送一个数据报,就要使用 sendto()函数或 WSASendTo()函数。在 Winsock 1 中提供的格式是:int sendto(SOCKET s,const char FAR*buf,int len,int flags,const struct sockaddr FAR*to,int tolen);(11)closesocket()在网络程序中,一个套接口不再使用时一定要关闭这个套接口,以释放与该套接口关联的所有资源,包括等候处理的数据。int closesocket(SOCKET s);(12)WSACleanup()当在应用程序中不再使用 Winsock API 中任何函数时,必须调用 WSACleanup()将其从 Windows Sockets 的实现中注销,以释放为应用程序或 DLL 分配的任何资源。因此,对应于一个任务进行的每一次 WSAStartup()调用,必须有一个 WSACleanup()调用,因为每次 WSAStartup()函数的调用都会增加对加载 Winsock DLL 的引用次数,它要求调用同样多次的 WSACleanup()调用,以此抵消引用次数。int WSACleanup(void);四、实验组织运行要求四、实验组织运行要求 1学生在进行实验前必须进行充分的预习,熟悉实验内容;2学生严格遵守实验室的各项规章制度,注意人身和设备安全,配合和服从实验室人员管理;3要求独立完成实验,教师可以给予一定的辅导;4教师检查学生的实验结果;55综合评定学生的实验成绩。五、实验条件五、实验条件 计算机、局域网环境、VC+6.0 开发环境 六、实验步骤六、实验步骤 1.编程实现服务器端程序;2.编程实现客户端程序;3.分别运行客户端和服务器端程序,进行联调;4.记录实验结果。七、思考题七、思考题 什么是网络字节顺序?Winsock 中与字节顺序转换相关的函数有哪几些?八、实验报告八、实验报告 1实验预习 在实验前每位学生都需要对本次实验进行认真的预习,并写好预习报告,在预习报告中要写出实验目的、要求、实验步骤和主要代码。2实验记录 通过截图认真记录实验运行结果。3实验报告 对实验的主要源程序和实验记录中记录的实验结果进行分析。对实验中的特殊现象、实验操作的成败、实验的关键点等内容进行整理、分析和总结。回答思考题,提出实验结论或提出自己的看法等。九、其它说明九、其它说明 学生在实验过程中应遵守实验室的各项规章制度,注意人身 6和设备安全,配合和服从实验室人员管理。7实验二:基于实验二:基于 TCP 协议的客户协议的客户/服务器通信程序服务器通信程序 实验学时:2 学时 实验类型:设计 实验要求:必修 一、实验目的一、实验目的 理解 TCP 通信程序设计过程,并结合特定应用场景(如创建留言板程序、创建多客户端服务器/客户通信程序等)完成程序开发。掌握 TCP 服务器程序和客户程序的创建过程,熟悉单播通信程序中用到的 Winsock 接口,培养学生将所学知识进行灵活运用的能力。二、实验内容二、实验内容 1.主机间 TCP 的性能测试之一:回程时延。2.服务器端能从客户端接收数据并立即将接收到的数据原样返回给客户方。3.客户端能往服务器端发送数据,然后立即接受从服务器端原样返回的数据。三、实验原理、方法和手段三、实验原理、方法和手段 基于 C/S 结构的程序在工作时,服务器的应用程序应该首先启动,并一直等待客户的服务请求。其具体工作流程可分为以下 8 个步骤。第一步:使用 WSAStartup()函数检查系统协议栈的安装情况。常用的调用格式有如下两种:8 WSAStartup(0 x0202,&wsaData)。WSAStartup(MAKEWORD(2,2),&wsaData)。第二步:使用 Socker()或 WSASocket()函数创建服务器通信的套接口。常用的调用格式如下:SOCKET serverSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);SOCKET serverSocket=socket(AF_INET,SOCK_STREAM,0);SOCKET serverSocket=WSAsocket(AF_INET,SOCK_STREAM,IPPROTO_TCP NULL,0,WSA_FLAG_OVERLAPPED);第三步:使用 bind()函数将创建的套接口与服务器地址绑定。常用的调用格式如下:Bind(serverSocket,(const struct sockaddr*)&localaddr,sizeof(sockaddr);Bind(serverSocket,(SOCKADDR*)&localaddr,sizeof(sockaddr);Bind(serverSocket,(sockaddr*)&localaddr,sizeof(sockaddr);Bind(serverSocket,(LPSOCKADDR*)&localaddr,sizeof(sockaddr);第四步:使用 listen()函数使服务器套接口做好接收连接请求的准备。常用的调用格式如下:Lister(serverSOcket,queuelen);第五步:使用 accpet()或 WSAAccept()函数来接收来自客户端由 connect()发出的连接请求。常用的调用格式如下:SOCKET Newsock=accpet(serverSocket,(stryct,sockaddr*)&clientaddr,&clientaddr_len);第六步:建立连接后,使用 send()或者 WSASend()函数来发送数据,或使用 recv()或 WSARecv()函数接收数据。第七步:使用 closesocket()函数关闭套接口。常用的调用格式如下:9Closesocket(serverSocket);第八步:最后调用 WSACleanup()函数,结束 Windows Socket API 使用。至此,服务器的工作过程结束。常用的调用格式如下:WSACleanup();客户端应用程序的工作流程如下 第一步:使用 WSAStrartup()函数检查系统协议栈的安装情况。其调用格式与服务器端调用格式类似。第二步:使用 socket()或 WSASocket()函数创建客户端套接口。其调用格式与服务器端调用格式类似。第三步:使用 connect()或 WSAConnect()函数发出与服务器建立连接的请求。常用的调用格式如下:Conect(clientSocket,(struct sockaddr*,sizeof(serveraddr);第四步:连接建立后使用 send()或 WSASend()函数发送数据,或使用recv()或 WSARecv()函数接收数据。第五步:使用 closesocket()函数关闭套接口。第六步:最后调用 WSACleanup()函数,结束 Windows Socket API 使用。至此,一次客户向服务器请求服务的过程结束。服务器与客户端通信的过程需要一个五元组来标识。这个五元组是(协议,本地地址,本地端口号,远地地址,远地端口号)服务器与客户机进行的上述通信过程如图 2-1 所示。10交换数据 WSAStartup()socket()bind()listen()等待客户连接请求的到来 accpet()WSACleanup()recv()send()closesocket()WSAStartup()socket()connect()send()recv()closesocket()WSACleanup()用三次握手过程建立TCP连接 交换数据 关闭 TCP 连接 图 2-1 面向连接的客户机-服务器程序工作模型 四、实验组织运行要求四、实验组织运行要求 1学生在进行实验前必须进行充分的预习,熟悉实验内容;2学生严格遵守实验室的各项规章制度,注意人身和设备安 11全,配合和服从实验室人员管理;3要求独立完成实验,教师可以给予一定的辅导;4教师检查学生的实验结果;5综合评定学生的实验成绩。五、实验条件五、实验条件 计算机、局域网环境、VC+6.0 开发环境 六、实验步骤六、实验步骤 1.编程实现基于 TCP 协议的服务器端程序;2.编程实现基于 TCP 协议的客户端程序;3.分别运行客户端和服务器端程序,进行联调;4.记录实验结果。七、思考题七、思考题 Winsock 中与建立连接有关的函数有哪几个?分别实现什么功能?八、实验报告八、实验报告 1实验预习 在实验前每位学生都需要对本次实验进行认真的预习,并写好预习报告,在预习报告中要写出实验目的、要求、实验步骤和主要代码。2实验记录 通过截图认真记录实验运行结果。3实验报告 对实验的主要源程序和实验记录中记录的实验结果进行分析。对实验中的特殊现象、实验操作的成败、实验的关键点等内容进行整理、分析和总结。回答思考题,提出实验结论或提出自 12己的看法等。九、其它说明九、其它说明 学生在实验过程中应遵守实验室的各项规章制度,注意人身和设备安全,配合和服从实验室人员管理。13实验三:实验三:WinInet 实现实现 FTP 客户端客户端 实验学时:2 学时 实验类型:设计 实验要求:必修 一、实验目的一、实验目的 通过本实验深入地了解 FTP 的工作原理以及服务器端和客户端的工作流程,学习Socket在网络编程中的各种应用,掌握WinInet的套接字编程。二、实验内容二、实验内容 1.开发 FTP 的客户端。2.完成在局域网内的测试。三、实验原理、方法和手段三、实验原理、方法和手段 1.WinInet 编程的简介 WinInet(Win32 Internet Extensions)为编写 Internet 客户端提供专门的接口。WinInet 是比 Winsock 更高层的接口,它只适合于编写 HTTP、FTP 和 Gopher 三种客户端应用程序。Visual C+提供了两种使用 WinInet 的方法:一种是直接调用 Win32 Internet 函数;另一种是使用 MFC WinInet 类来使用 WinInet。2.基本 WinInet 函数(1)打开一个 WinInet 对话 大 多 数 的 WinInet 函 数 在 使 用 之 前,必 须 首 先 调 用InternetOpen()函数,以打开一个新的对话,然后在调用其他函数时 14以该函数返回的句柄为做为输入参数,只有这样才可以进行其他的操作。该函数的调用格式如下:HINTERNET InternetOpen(IN LPCTSTR lpszAgent,IN DWORD dwAccessType,IN LPCTSTR lpszProxyName,IN LPCTSTR lpszProxyBypass,IN DWORD dwFlags);(2)与服务器建立连接 为了与 FTP、HTTP 或 Gopher 服务器进行通信,客户机首先应 该 与 服 务 器 建 立 连 接。与 服 务 器 建 立 连 接 的 函 数 是InternetConnect(),它的原型如下:HINTERNET InternetConnect(IN HINTERNET hInternet,IN LPCTSTR lpszServerName,IN INTERNET_PORT nServerPort,IN LPCTSTR lpszUserName,IN LPCTSTR lpszPassword,IN DWORD dwService,IN DWORD dwFlags,IN DWORD_PTR dwContext);(3)通用文件操作 在 WinInet API 中定义的大部分函数,在调用之前先要与服务 15器之间建立连接,然而 WinInet API 中定义的 InternetOpenUrl()函数提供了一种从 FTP、HTTP 或 Gopher 服务器获取数据的简单方法,即以一种通用的方法调用 InternetOpenUrl()函数,该函数的原型如下:HINTERNET InternetOpenUrl(IN HINTERNET hInternet,IN LPCTSTR lpszUrl,IN LPCTSTR lpszHeaders,IN DWORD dwHeadersLength,IN DWORD dwFlags,IN DWORD_PTR dwContext);3.FTP 客户机 WinInet 函数(1)获取 FTP 目录 可以使用FtpGetCurrentDirectory()函数获取特定FTP的当前目录。该函数的原型如下:BOOL FtpGetCurrentDirectory(IN HINTERNET hConnect,OUT LPTSTR lpszCurrentDirectory,IN OUT LPDWORD lpdwCurrentDirectory);(2)设置 FTP 当前目录 设置 FTP 当前工作目录的函数原型如下:BOOL FtpSetCurrentDirectory(IN HINTERNET hConnect,16 IN LPCTSTR lpszDirectory);(3)创建 FTP 目录 在一个 FTP 服务器上创建一个新目录的函数原型如下:BOOL FtpCreateDirectory(IN HINTERNET hConnect,IN LPCTSTR lpszDirectory);(4)删除 FTP 目录 删除 FTP 目录的函数原型如下:BOOL FtpRemoveDirectory(IN HINTERNET hConnect,IN LPCTSTR lpszDirectory);(5)查找文件 使用 FtpFindFirstFile()函数可以从指定的 FTP 服务器上查找文件或目录,该函数原型如下:HINTERNET FtpFindFirstFile(IN HINTERNET hConnect,IN LPCTSTR lpszSearchFile,OUT LPWIN32_FIND_DATA lpFindFileData,IN DWORD dwFlags,IN DWORD_PTR dwContext);(6)下载文件 17使用 FtpGetFile()函数可以从指定的 FTP 服务器下载文件,该函数原型如下:BOOL FtpGetFile(IN HINTERNET hConnect,IN LPCTSTR lpszRemoteFile,IN LPCTSTR lpszNewFile,IN BOOL fFailIfExists,IN DWORD dwFlagsAndAttributes,IN DWORD dwFlags,IN DWORD_PTR dwContext);(7)上传文件 使用 FtpPutFile()函数可以把指定文件上载到 FTP 服务器,该函数原型如下:BOOL FtpPutFile(IN HINTERNET hConnect,IN LPCTSTR lpszLocalFile,IN LPCTSTR lpszNewRemoteFile,IN DWORD dwFlags,IN DWORD_PTR dwContext);(8)文件更名 使用 FtpRenameFile()函数可以更改远程 FTP 服务器上指定文件的名称,该函数原型如下:BOOL FtpRenameFile(18 IN HINTERNET hConnect,IN LPCTSTR lpszExisting,IN LPCTSTR lpszNew);4.MFC WinInet 类及其应用方法 基于 MFC WinInet 类开发 FTP 客户端程序的一般步骤:目的目的 方法方法 结果结果 开始一个开始一个 FTP 会话,建立一个会话,建立一个 FTP连接连接 创建一个创建一个 CInternetSession 对象对象 初始化初始化 WinInet 并联接服务器并联接服务器 连接到一个连接到一个 FTP Server 用用 CInternetSession:GetFtpConnection 返回一个返回一个 CFtpConnection对象对象 设置设置 FTP 服务器的工作目录服务器的工作目录 用用 CFtpConnection:SetCurrentDirectory设置设置 FTP 服务器的工作目录服务器的工作目录 Find 第一个第一个 FTP目录中的文件目录中的文件 创 建 一 个创 建 一 个 CFtpFileFind 对 象,调 用对 象,调 用CFtpFileFind:FindFile Find 第一个文件第一个文件,如果文件每找到返回如果文件每找到返回 FALSE Find 下一个下一个 FTP目录中的文件目录中的文件 Find下一个资源,调用下一个资源,调用CFtpFileFind:FindNextFile直 到 返 回直 到 返 回FALSE。Find 下一个文件下一个文件 如 果 文 件 没 找 到 返 回如 果 文 件 没 找 到 返 回FALSE 打开打开 FindFile 或或FindNextFile找到的文件(用于读写)找到的文件(用于读写)调用调用 CFtpConnection:OpenFile,参数为,参数为FindFile 或或 FindNextFile 返回的文件名返回的文件名 打开打开FindFile或或FindNextFile 找到的文件(用于读写)找到的文件(用于读写),返回一个返回一个CInternetFile 对象对象 读写文件读写文件 以 读 方 式 打 开以 读 方 式 打 开FTP文 件,用文 件,用使用你指定的缓冲读使用你指定的缓冲读 19CInternetFile:Read 指定的字节数指定的字节数 写写 FTP 文件文件 以 写 方 式 打 开以 写 方 式 打 开FTP文 件,调 用文 件,调 用CInternetFile:Write,使用你指定的缓冲写使用你指定的缓冲写 指定的字节数指定的字节数 获取客户端在服务器上的当前目录获取客户端在服务器上的当前目录 调用调用CFtpConnection:GetCurrentDirectory 获取目录信息获取目录信息 异常处理异常处理 用用 CInternetException 类 类 处理所有普通的处理所有普通的 Internet异常类型异常类型 结束结束 FTP session 处理处理 CInternetSession 对象对象 自动清除打开的句柄的连接自动清除打开的句柄的连接 四、实验组织运行要求四、实验组织运行要求 1学生在进行实验前必须进行充分的预习,熟悉实验内容;2学生严格遵守实验室的各项规章制度,注意人身和设备安全,配合和服从实验室人员管理;3要求独立完成实验,教师可以给予一定的辅导;4教师检查学生的实验结果;5综合评定学生的实验成绩。五、实验条件五、实验条件 计算机、局域网环境、VC+6.0 开发环境 六、实验步骤六、实验步骤 1.基于 Win32 Internet 函数或使用 MFC WinInet 类开发一个FTP 客户端程序,实现查询、上传文件和下载文件等功能;2.在局域网内配置一个 FTP 服务器;3.运行 FTP 客户端程序,登录到局域网内的 FTP 服务器,进行测试,记录实验结果。20七、思考题七、思考题 无。八、实验报告八、实验报告 1实验预习 在实验前每位学生都需要对本次实验进行认真的预习,并写好预习报告,在预习报告中要写出实验目的、要求、实验步骤和主要代码。2实验记录 通过截图认真记录实验运行结果。3实验报告 对实验的主要源程序和实验记录中记录的实验结果进行分析。对实验中的特殊现象、实验操作的成败、实验的关键点等内容进行整理、分析和总结。回答思考题,提出实验结论或提出自己的看法等。九、其它说明九、其它说明 学生在实验过程中应遵守实验室的各项规章制度,注意人身和设备安全,配合和服从实验室人员管理。21实验四实验四 简易聊天系统的实现简易聊天系统的实现 实验学时:2 学时 实验类型:设计 实验要求:必修 一、实验目的一、实验目的 通过编写简单的聊天程序,理解MFC的Socket类同Socket API之间的区别以及 MFC 的两种类之间的联系与区别。二、实验内容二、实验内容 基于 MFC 设计实现包括客户端和服务器端的简单聊天系统。三、实验原理、方法和手段三、实验原理、方法和手段 1.MFC 类库简介 MFC(Microsoft Foundation Classes)是微软公司提供的用于C+程序设计的基础类库,它由两大部分组成:一部分是通常所说的 C+类库,是 MFC 类库的主体部分,这些类构成了 MFC 应用程序框架;另一部分是 MFC 预定义宏、全局变量和全局函数,是 MFC 类库的辅助部分。这两部分都是用MFC 进行 Windows 应用程序开发不可缺少的组成部分。2.Windows 套接口类(Windows Sockets)MFC中 定 义 了 一 个Windows套 接 口 程 序 设 计 类CAsyncSocket,MFC还定义了一个派生于CAsyncSocket的CSocket类,这两个类简单易用,用户可以使用它们来实现自己的网络程序。常用的函数有:22(1)Accept()函数 Virtual BOOL Accept(CAsyncSocket&rConnectedSocket,SOCKADDR*lpSockAddr=NULL,int*lpSockAddrLen=NULL);该函数用于在一个套接口上接受连接请求。rConnectedSocket参数为监听套接口,lpSockAddr 参数为指向地址的指针,其初始值为空,在连接建立后保存远程套接口的 IP 地址,lpSockAddrLen参数为指向客户套接口地址长度的指针。(2)AsyncSelect()函数 BOOL AsyncSelect(long lEvent=FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT|FD_CLOSE);该函数用于在套接口准备好之后,请求网络事件通知。(3)Attach()函数 BOOL Attach(SOCKET hSocket,long lEvent=FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT|FD_CLOSE);其中 hSocket 参数为套接口句柄。该函数的作用是将一个套接口句柄连接到一个 CAsyncSocket 对象实例上,即建立两者的关联,这样就可以实现与另一台计算机的连接了。(4)Bind()函数 BOOL Bind(UINT nSocketPort,LPCTSTR lpszSocketAddress=NULL);BOOL Bind(const SOCKADDR*lpSockAddr,int nSockAddrLen);23该函数用于建立一个本地地址与一个套接口的关联,即进行套接口与本了地址的绑定。它有两种调用格式,第一种调用格式提供套接口、端口号和地址,使用字符串形式的地址,一般常用的是这种调用方法。第二种调用格式提供 SOCKADDR 结构类型的地址参数。(5)Close()函数 virtual void Close();该函数用于关闭套接口,释放与套接口有关的系统资源。要注意的是 Close()函数是在对象被删除时由 CAsyncSocket 的析构函数自动调用的。Close()函数的行为取决于套接口的 SO_LINGER 和SO_DONTLINGER 选项。(6)Connect()函数 BOOL Connect(LPCTSTR lpszHostAddress,UINT nHostPort);BOOL Connect(const SOCKADDR*lpSockAddr,int nSockAddrLen);该函数用于建立与远程套接口的连接。它有两种调用格式,第一种调用格式使用套接口、端口号和地址,且地址使用参数为字符串型的地址参数,例如“”,或点分十进制的地址,如“128.56.22.8”。第二种调用格式提供 SOCKADDR 结构类型的地址参数。(7)Create()函数 BOOL Create(UINT nSocketPort=0,int nSocketType=SOCK_STREAM,long lEvent=FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT|FD_CLOSE,24LPCTSTR lpszSocketAddress=NULL);在调用 CAsyncSocket 的构造函数创建了 CAsyncSocket 对象后,需要调用Create()函数来创建底层的套接口。因为CAsyncSocket的构造函数没有带参数,所以它只创建一个新的空套接口对象,创建底层套接口的真正工作是由 Create()函数来完成的。(8)Listen()函数 BOOL Listen(int nConnectionBacklog=5);该函数用于连接的监听,当调用成功时返回一个非 0 的值。参数 nConnectionBacklog 的取值区间为 1 到 5,默认值为 5,它指出正在等待连接的最大队列长度。(9)OnAccept()函数 virtual void OnAccept(int nErrorCode);该函数是一个需要重载的回调函数,当一个套接口可能需要与另一端建立连接时,可以调用此函数处理相应的消息。参数nErrorCode 指出最新的错误代码。(10)OnClose()函数 virtual void OnClose(int nErrorCode);该函数是一个需要重载的回调函数,当一个套接口关闭时,可以调用此函数处理相应的消息。(11)OnConnect()函数 virtual void OnConnect(int nErrorCode);该函数是一个需要重载的回调函数,当一个套接口成功建立连接或连接失败时,可以调用此函数处理相应的消息。(12)OnOutOfBandData()函数 virtual void OnOutOfBandData(int nErrorCode);25该函数是一个需要重载的回调函数,如果一些非常急需的数据已经准备好,就会发出相应的消息,这一类消息的处理需要由该函数完成。(13)OnReceive()函数 virtual void OnReceive(int nErrorCode);该函数是一个需要重载的回调函数,当一个套接口已经准备好数据,并可以由函数 Receive()接收时,就可以调用此函数处理相应的消息。(14)OnSend()函数 virtual void OnSend(int nErrorCode);该函数是一个需要重载的回调函数,当一个套接口已经准备好数据,并可以由 Send()函数发送时,就可以调用该函数处理相应的消息。(15)Receive()函数 virtual int Receive(void*lpBuf,int nBufLen,int nFlags=0);该函数用于获得已经与当前套接口建立连接的远程套接口发送的数据。数据存入 lpBuf 缓冲区中。(16)ReceiveFrom()函数 int ReceiveFrom(void*lpBuf,int nBufLen,CString&rSocketAddress,UINT&rSocketPort,int nFlags=0);int ReceiveFrom(void*lpBuf,int nBufLen,SOCKADDR*lpSockAddr,int*lpSockAddrLen,int nFlags=0);该函数用于从无连接的远程套接口上读取数据报信息。26(17)Send()函数 virtual int Send(const void*lpBuf,int nBufLen,int nFlags=0);该函数用于向与当前套接口已经建立连接的远程套接口发送数据。(18)SendTo()函数 int SendTo(const void*lpBuf,int nBufLen,UINT nHostPort,LPCTSTR lpszHostAddress=NULL,int nFlags=0);int SendTo(const void*lpBuf,int nBufLen,const SOCKADDR*lpSockAddr,int nSock

    注意事项

    本文(通信专业《TCPIP技术》实验指导书.pdf)为本站会员(赵**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开