ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:94.37KB ,
资源ID:11696922      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11696922.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《信息通信网络概论》实验指导书.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

《信息通信网络概论》实验指导书.docx

1、信息通信网络概论实验指导书信息通信网络概论实验指导书周波,张希东南大学自动化学院2015-4目 录实验一 TCP/IP协议与Socket编程认识实验 4一、 实验目的 4二、 实验内容 4三、 实验原理 4四、 实验步骤 5五、 思考题或讨论题 6实验二 FTP客户端通信程序设计 7一、 实验目的 7二、 实验内容 7三、 实验原理 7四、 思考题或讨论题 9实验三 基于客户/服务器模式的网络通信编程实现 11一、 实验目的 11二、 实验内容 11三、 实验原理 11四、 应用程序的设计方法和步骤 12五、 聊天室应用程序设计的具体说明 141、聊天室的工作流程 142、套接字事件处理 15

2、3、系统实现 163.1 利用MFC AppWizard生成程序框架 163.2 增加控件对象 163.3 从CAsyncSocket类继承 163.4 建立客户机与服务器之间的连接 163.5 发送和接收数据 173.6 终止连接 174、结束语 17六、 思考题或讨论题 18实验四计算机网络通信应用程序设计 19(一)基于TCP/IP的计算机网络通信应用程序设计 19一、 实验目的 19二、 实验内容 19三、 实验步骤 19(二)基于UDP/IP的计算机网络通信应用程序设计 20一、 实验目的 20二、 实验内容 20三、 实验步骤 21四、 思考题或讨论题 21附录:实验中需要用到的W

3、INSOCK API函数和数据结构 22accept(): 22bind() 23closesocket(): 24connect(): 26listen(): 27socket(): 28recv(): 29send(): 31WSAAsyncSelect(): 32WSAStartup() : 36Gethostbyname 37Gethostbyaddr 38inet_ntoa 38inet_addr 38WSADATA 和 LPWSADATA 38实验一 TCP/IP协议与Socket编程认识实验一、 实验目的 1) 熟悉TCP/IP协议的功能和网络操作;2) 了解基于SOCKET的编

4、程原理; 3) 编写一个小型的Socket实用程序,初步了解Windows环境下使用Socket的编程。 二、 实验内容 在已有的程序框架下,编写一个查询主机地址和域名的程序。实现功能:1) 输入域名查询IP地址;2) 输入IP地址查询域名。三、 实验原理1) 什么是Windows Sockets规范?Windows Sockets规范以U.C. Berkeley大学BSD UNIX中流行的Socket接口为范例定义了一套Micosoft Windows下网络编程接口。它不仅包含了人们所熟悉的Berkeley Socket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充

5、分地利用Windows消息驱动机制进行编程。 Windows Sockets规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。此外,在一个特定版本Windows的基础上,Windows Sockets也定义了一个二进制接口(ABI),以此来保证应用Windows Sockets API的应用程序能够在任何网络软件供应商的符合Windows Sockets协议的实现上工作。因此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。 遵守这套Windows Sockets规范的网络软件,我们称之为Windows Sockets兼

6、容的,而Windows Sockets兼容实现的提供者,我们称之为Windows Sockets提供者。一个网络软件供应商必须百分之百地实现Windows Sockets规范才能做到现Windows Sockets兼容。 任何能够与Windows Sockets兼容实现协同工作的应用程序就被认为是具有Windows Sockets接口。我们称这种应用程序为Windows Sockets应用程序。 Windows Sockets规范定义并记录了如何使用API与Internet协议族(IPS,通常我们指的是TCP/IP)连接,尤其要指出的是所有的Windows Sockets实现都支持流套接口和数

7、据报套接口. 应用程序调用Windows Sockets的API实现相互之间的通讯。Windows Sockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。它们之间的关系如图1-1。 2) Winsock编程模型 1) 建立socket。程序使用socket进行网络时,必须先建立一个socket。为了建立一个socket,成需要调用socket函数。例子: socket_handle=socket(protocol_family,_socket_type,protocol); 2) 配置一个socket。为了配置一个,程序可使用Winsock API中不同的函数。一般来讲,

8、每个socket需要五种信息:本地和远地机的IP地址,本地和远地进程的协议端口,联接上使用的协议。 3) 连接一个socket。面向连接客户程序必须提供给Socket的唯一地址信息是远地主机信息IP地址和协议端口。 4) 使用一个Socket,程序能够使用Winsock API在一个配置好的Socket上传送和接收数据。I/O函数如下:Send,通过连接的Socket传送数据,使用特殊的标志控制Socket的行为。Sendto,将数据传送给Socket地址结构指定的主机,传送时使用一个简单的报文缓冲区。Recvfrom,从Socket接收数据,选择发送主机的网络地址,传送时使用一个简单的报文缓

9、冲区。 5) 使用一个连接的Socket。由于Send函数不能指定目的地址,因此,程序只能在连接的Socket上使用它。也就是说,在程序使用Send函数之前,必须建立一个Socket。 6) 使用一个无连接的Socket。当没有建立Socket连接时,上述的Send函数便不能使用,这是需要用Sendto函数。 四、 实验步骤1) 网络程序初始化,服务器和客户端WinSock API均要求在调用其他WinSock函数以前先调用WSAStartUp函数初始化。2) 创建套接字Socket()。3) 配置并启动套接字。4) 通过Socket发送和接收数据。5) 程序结束时必须关闭Socket,使用与

10、WSAStartUp()相对应的函数WSACleanUp(),释放所分配的内部缓冲区和其他资源。五、 思考题或讨论题1. WinInet有什么作用?2. 结合本次实验,谈谈使用MFC WinInet类有哪些优点?实验二 FTP客户端通信程序设计 一、 实验目的 1. 了解Windows下的TCP/IP通信方式与网络操作2. 熟悉FTP的编程的过程;3. 学会用可视化编程语言编写调试简单的通信程序。二、 实验内容在已有的程序框架下,编写一个FTP客户端程序。实现功能:1) 连接到FTP主机,下载FTP文件服务器文件列表;2) 切换访问目录;3) 向FTP服务器发送文件(上传文件);4) 从FTP

11、服务器下载文件(下载文件)。 三、 实验原理在使用MFC编程时,要连接到FTP服务器是一件非常简单的事情,只需要两个简单的步骤,首先必须建立一个CinternetSession对象,用类CinternetSession创建并初始化一个或几个同时存在的Internet会话(Session),并描述与代理服务器的连接(如果有必要的话),如果在程序运行期间需要保持与Internet的廉洁,可以创建一个CinternetSession对象作为类CwinApp的成员。 MFC中的类CftpConnection管理我们与Internet服务器的连接,并直接操作服务器上的目录和文件,FTP时MFC的WinI

12、net支持的三个Internet功能之一,我们需要先创建一个CinternetSession实例和一个CftpConnection对象就可以实现和一个FTP服务器通信,我们不需要直接创建CftpConnection对象,而是通过调用CinternetSession:GetFtpConnection来完成这项工作。他创建CFtpConnection对象并返回一个指向该对象的指针。在FTP连接的程序中,主要适用下列7个函数: 1) CInternetSession对象 语法:CInternetSession(LPCTSTR pstrAgent,DWORD dwConText ,DWORD dwAc

13、cessType,LPCTSTR pstrProxyName,LPCTSTR pstrProxyBypass,DWORD dwFlags);注释:在创建CInternetSession对象时调用这个成员函数,CInternetSession是应用程序第一个要调用的Internet函数,它将创始化内部数据结构,以备将来在应用程序中调用。如果dwFlags包含INTERNET_FLAG_ASYNC,那末从这个句柄派生的所有的句柄,在状态回调例程注冊之前,都会出现异步状态。如果沒有打开Internet连接,CInternetSession就会抛出一个例外,fxThorowInternetExcept

14、ion。 2) GetFtpConnection()函数。 语法:CFtpConnection* CIternetSession:GetFtpConnection(LPCTSTR pstrServer,LPCTSTR pstrUserName,LPCTSTR pstrPassword,INTERNET_PORT nPort,BOOL bPassive);注释:调用这个函数建立一个FTP连接,并获得一个指向CFtpConnection对象的指针,GetFtpConnection连接到一个FTP服务器,创建并返回指向CFtpConnection对象的指针,它不在服务器上进行任何操作。如果打算读写文

15、件,必须进行分步操作。关于查找,打开和读写文件的信息需参考CFtpConnection和CFtpFileFind类。对这个函数的调用返回一个指向CFtpConnection对象的指针。如果调用失败,检查抛出的CInternetException对象,就可以确定失败的原因。 3) GetFile()函数。 语法:BOOL GetFile(LPCTSTR pstrRemoteFile,LPCTSTR pstrLocalFile,BOOL bFailExists ,DWORD dwAttributes,DWORD dwFlags,DWORD dwContext); 注释:调用这个成员函数,可以从FT

16、P服务器取得文件,并且把文件保存在本地机器上。GetFile()函数是一个比较高级的例程,它可以处理所有有关从FTP服务器读文件,以及把文件存放在本地机器上的工作。如果dwFlags为FILE_TRANSFER_TYPE_ASCII,文件数据的传输也会把控制和格式符转化为Windows中的等阶符号。默认的传输模式是二进制模式,文件会以和服务器上相同的格式被下载。 pstrRemoteFile和 pstrLocalFile可以是相对于当前目录的部分文件名,也可以是全文件名,在这两个名字中间,都既可以用反斜杠()或者正斜杠(/)来作为文件名的目录分隔符,GetFile()在使用前会把目录分隔符转化

17、为适当的字符。 可以用自己选择的值来取代dwContext默认的值,设置为上下文标识符与CFtpConnection对象的定位操作有关,这个操作由CFtpConnection中的CInternetSession对象创建。返回给CInternetSession:OnStatusCallBack的值指出了所标识操作的状态。 如果调用成功,函数的返回为非0,否则返回0,如果调用失败,可以调用Win32函数GetLastError(),确认出错的原因。 4) PutFile()函数。 语法:BOOL PutFile(LPCTSTR pstrLocalFile, LPCTSTR pstrRemoveFi

18、le ,DWORD dwFlags, DWORD dwContext); 注释:调用这个成员函数可以把文件保存到FTP服务器。PutFile()函数是一个比较高级的例程,它可以处理有关把文件存放到服务器上的工作。只发送数据,或要严格控制文件传输的应用程序,应该调用OpenFile和 CInternet:Write。利用自己选择的值来取代dwContext默认的值,设置为上下文标识符,上下文标识符是CInternetSession对象创建的CFtpConnection对象的特定操作有关,这个值返回给CInternetSession:OnStateCallBack,从而把操作的状态通报给它所标识的

19、上下文。 如果调用成功,函数的返回为非0,否则返回0,如果调用失败,可以调用Win32函数GetLastError(),确认出错的原因。 5) FTP文件查找函数。 调用这个成员函数构造一个CftpFileFind对象。6) FindFile()函数。 调用这个函数查找FTP文件,调用它检索到第一个FTP文件后,可以调用FindNextFile()检索后面的FTP文件。7) FindNextFile()函数。 调用这个函数继续查找文件,在调用任何属性以前,必须已经至少调用过一次此函数。 以上函数的具体使用方法可以参见MSDN。 四、 思考题或讨论题1. WinInet有什么作用?2. 结合本次

20、实验,谈谈使用MFC WinInet类有哪些优点?实验三 基于客户/服务器模式的网络通信编程实现(基于Socket的网络聊天室的设计与实现)一、 实验目的1. 进一步了解网络编程的过程;2. 掌握Windows环境下基于WinSock的编程方法和通信实现; 3. 熟悉客户/服务器模式的网络通信编程实现,编写一个聊天工具,即以客户端和服务器端的模式进行互发消息。二、 实验内容Internet上可以提供一种叫IRC 的服务。使用者通过客户端的程序登录到IRC服务器上,就可以与登录在同一IRC服务器上的客户进行交谈,这也就是平常所说的聊天室。 在已有的程序框架下,编写一个类似的聊天程序。实现功能:1

21、) 服务器端:i. 建立Socket,绑定端口,并监听;ii. 接受客户端的连接;iii. 与客户端进行通讯;iv. 断开连接。2) 客户端:i. 建立Socket,并申请连接到服务器;ii. 与服务器进行通讯;iii. 断开连接。三、 实验原理 一个在建立分布式应用时最常用的范例便是客户机/服务器模型。在这种方案中客户应用程序向服务器程序请求服务。这种方式隐含了在建立客户机/服务器间通讯时的非对称性。客户机/服务器模型工作时要求有一套为客户机和服务器所共识的惯例来保证服务能够被提供(或被接受)。这一套惯例包含了一套协议。它必须在通讯的两头都被实现。根据不同的实际情况,协议可能是对称的或是非对

22、称的。在对称的协议中,每一方都有可能扮演主从角色;在非对称协议中,一方被不可改变地认为是主机,而另一方则是从机。一个对称协议的例子是Internet中用于终端仿真的TELNET。而非对称协议的例子是Internet中的FTP。无论具体的协议是对称的或是非对称的,当服务被提供时必然存在“客户进程”和“服务进程”。 一个服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户对这个服务的地址提出了连接请求。在这个时刻,服务程序被“惊醒”并且为客户提供服务对客户的请求作出适当的反应。这一请求/相应的过程可以简单的用图2-1表示。虽然基于连接的服务是设计客户机

23、/服务器应用程序时的标准,但有些服务也是可以通过数据报套接口提供的。 四、 应用程序的设计方法和步骤1) 服务端 1) 建立Socket 初始化WinSock的动态连接库后,需要在服务器端建立一个监听的Socket,为此可以调用Socket()函数用来建立这个监听的Socket,并定义此Socket所使用的通信协议。此函数调用成功返回Socket对象,失败则返回INVALID_SOCKET(调用WSAGetLastError()可得知原因,所有WinSocket 的函数都可以使用这个函数来获取失败的原因)。2) 绑定端口 接下来要为服务器端定义的这个监听的Socket指定一个地址及端口(Por

24、t),这样客户端才知道待会要连接哪一个地址的哪个端口,为此我们要调用bind()函数,该函数调用成功返回0,否则返回SOCKET_ERROR。3) 监听 当服务器端的Socket对象绑定完成之后,服务器端必须建立一个监听的队列来接收客户端的连接请求。listen()函数使服务器端的Socket 进入监听状态,并设定可以建立的最大连接数(目前最大值限制为 5, 最小值为1)。该函数调用成功返回0,否则返回SOCKET_ERROR。 服务器端的Socket调用完listen()后,如果此时客户端调用connect()函数提出连接申请的话,Server 端必须再调用accept() 函数,这样服务器

25、端和客户端才算正式完成通信程序的连接动作。为了知道什么时候客户端提出连接要求,从而服务器端的Socket在恰当的时候调用accept()函数完成连接的建立,我们就要使用WSAAsyncSelect()函数,让系统主动来通知我们有客户端提出连接请求了。该函数调用成功返回0,否则返回SOCKET_ERROR。4) 服务器端接受客户端的连接请求 当Client提出连接请求时,Server 端hwnd视窗会收到Winsock Stack送来我们自定义的一个消息,这时,我们可以分析lParam,然后调用相关的函数来处理此事件。为了使服务器端接受客户端的连接请求,就要使用accept() 函数,该函数新建

26、一Socket与客户端的Socket相通,原先监听之Socket继续进入监听状态,等待他人的连接要求。该函数调用成功返回一个新产生的Socket对象,否则返回INVALID_SOCKET。5) 结束 socket 连接 结束服务器和客户端的通信连接是很简单的,这一过程可以由服务器或客户机的任一端启动,只要调用closesocket()就可以了,而要关闭Server端监听状态的socket,同样也是利用此函数。2) 客户端 客户端比较简单,只有一个 socket,与服务端进行连接。连接建立好后,通过此 SOCKET 发送和接收信息。 1) 建立客户端的Socket 客户端应用程序首先也是调用WS

27、AStartup() 函数来与Winsock的动态连接库建立关系,然后同样调用socket() 来建立一个TCP或UDP socket(相同协定的 sockets 才能相通,TCP 对 TCP,UDP 对 UDP)。与服务器端的socket 不同的是,客户端的socket 可以调用 bind() 函数,由自己来指定IP地址及port号码;但是也可以不调用 bind(),而由 Winsock来自动设定IP地址及port号码。 2) 提出连接申请 客户端的Socket使用connect()函数来提出与服务器端的Socket建立连接的申请,函数调用成功返回0,否则返回SOCKET_ERROR。3)

28、数据的传送 虽然基于TCP/IP连接协议(流套接字)的服务是设计客户机/服务器应用程序时的主流标准,但有些服务也是可以通过无连接协议(数据报套接字)提供的。介绍一下TCP socket 与UDP socket 在传送数据时的特性:Stream (TCP) Socket 提供双向、可靠、有次序、不重复的资料传送。Datagram (UDP) Socket 虽然提供双向的通信,但没有可靠、有次序、不重复的保证,所以UDP传送数据可能会收到无次序、重复的资料,甚至资料在传输过程中出现遗漏。由于UDP Socket 在传送资料时,并不保证资料能完整地送达对方,所以绝大多数应用程序都是采用TCP处理So

29、cket,以保证资料的正确性。一般情况下TCP Socket 的数据发送和接收是调用send() 及recv() 这两个函数来达成,而 UDP Socket则是用sendto() 及recvfrom() 这两个函数,这两个函数调用成功发挥发送或接收的资料的长度,否则返回SOCKET_ERROR。五、 聊天室应用程序设计的具体说明1、聊天室的工作流程首先,服务器要创建一个用于侦听的套接字,为该套接字分配地址之后,调用listen()函数使它处于侦听状态;客户机在创建套接字完毕后,为套接字分配地址,然后调用connect()函数,请求与服务器套接字连接;服务器套接字在收到客户机的连接请示后,调用a

30、ccept()函数,该函数创建一个用于连接的套接字。应用该套接字和客户机上的连接套接字,用户就可以在服务器和客户机之间进行数据传输了。在结束传输之后,客户机调用closesocket()函数关闭套接字,服务器也调用该函数关闭用于侦听和连接的套接字。2、套接字事件处理消息处理函数, 这些函数并不对套接字作实质上的操作, 是Windows为套接字加上消息驱动的产物。它们和特定的套接字消息相关联, 当消息到来时, 应用程序框架就调用这些函数。它们都是CAsyncSocket类的虚函数, 因为MFC库中没有定义这些函数的内容, 程序员必须根据需要重载这些函数, 把对套接字进行实质操作的函数加进这些函数

31、中。OnAccept():监听套接字在断口听到连接请求时,应用程序框架调用该函数以告之可以接受或拒绝连接请求,调用Accept来接受请求,建立连接。OnConnect():当客户端套接字连接请求完成后,应用程序框架调用该函数,告之是否成功。OnSend():框架调用该函数通知该套接字现在可以调用Send函数开始传送数据。OnReceive():框架调用该函数通知套接字可以调用Receive函数从数据缓冲区中取数据。OnClose():框架调用该函数告之与其相连的对方套接字已被关闭。3、系统实现3.1 利用MFC AppWizard生成程序框架在Visual C+的IDE环境下选择菜单File NewProjects MFC AppWizard(exe) Project Name“OK”“NEXT”Windows Sockets“ Finish”按钮,选择“OK”按钮,应用程序的框架就将自动创建。3.2 增加控件对象在创建了应用程序框架之后,可以布置程序的主对话框,向应用程序的主对话框添加控件。设计好了对话框之后,选取View 菜单中的ClassWizard菜单项,或直接按“Ctrl+W ”,打开MFC ClassWizard,将对话框中的控件和变量相关联,其关系如下表所示。变量说明表对象名称类别类别IDC_BTN_CONNECTm_btnConnec

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

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