计算机网络 课程设计报告

实验一:网络聊天程序的设计和实现

一、实验题目

网络聊天程序的设计和实现

  • 实验目的

使用socket编程,了解socket编程的通信原理,会使用socket进行简单的网络编程,在此基础上编写一聊天程序,能够运行程序,运行客户端和服务器端,实现两个客户端通过服务器端进行通信

  • 总体设计

1、背景知识

套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。用户数据报协议(UDP,User Datagram Protocol)是一种无需建立连接就可以发送封装的 IP 数据包的传输层通信协议。它不提供数据包分组、组装、对数据包进行排序、报文到达确认、流量控制等功能。

2、基本原理

Socket是一种“打开—读/写—关闭”模式的实现,服务器和客户端各自维护一个“文件”,在建立连接打开后,可以向文件写入内容供对方读取或者读取对方的内容,通讯结束时关闭文件。

Socket在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口,供应用层调用实现进程在网络中的通信。

Socket保证了不同计算机之间的通信,对于网站,通信模型是服务器与客户端之间的通信。两端都建立一个socket对象,然后通过socket对象对数据进行传输。通常服务器处于一个无限循环,等待客户端的连接。

3、模块介绍

(1)服务器端:监听本网络上的所有Ip,如有连接请求,则通过连接,与客户端进行一对一通信。

(2)客户端:通过给定的端口号与Ip地址连接到服务器端,与服务器端进行通信。

四、详细设计

(1)服务端

加载套接字库,创建套接字(Socket)

绑定套接字到一个 IP 地址和一个端口上(bind())

将套接字设置为监听模式等待连接请求(listen())

请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept())

用返回的套接字和客户端进行通信(send())

返回,等待另一连接请求

关闭套接字,关闭加载的套接字库

(2)客户端

加载套接字库,创建套接字(Socket)

向服务器发出连接请求(connect())

和服务器端进行通信(send())

关闭套接字,关闭加载的套接字库

流程图

五、实验结果与分析

分析:首先必须要打开服务端,让服务器建立监听,然后再打开客户端,与服务器建立连接,客户端可以向服务器先发送消息,然后收到服务器的回复后又可以继续发送。有一个缺点是,必须要一来一回的聊天,客户端不能向服务器发送多条消息,同样服务器也不能。出现的问题忽视要链接一个 ws2_32.lib 的库文件(#pragma comment(lib,"ws2_32"))

  • 小结与心得体会

本实验是第一个实验,刚开始拿到这题,完全没有一点思路,看了附录一后,逐渐对网络通信有了一点了解。在此之前我们没有接触过使用socket接口实现网络协议的一系列编程思想,对TCP和UDP的了解也仅限于理论知识,完全不会运用到实验中。在实验一中,我学会使用socket实现通信,也了解了一系列编程协议,同时从整体上对于winsock的使用流程有了更深一步的了解,通过阅读源码,对于TCP/IP协议在程序运行的实质和流程有了根深的理解。

实验二:Tracert 与 Ping 程序设计与实现

一、实验题目

Tracert 与 Ping 程序设计与实现

二、实验目的

参照Tracert 程序,了解 Tracert 程序的实现原理,并调试通过。然后参考 Tracert 程序和教材 4.4.2 节,编写一个 Ping 程序,并能测试本局域网的所有机器是否在线,能够编写运行界面更好。

三、总体设计

Tracert 程序关键是对 IP 头部生存时间(time to live)TTL 字段的使用,程序实现时是向目地主机发送一个 ICMP 回显请求消息,初始时 TTL 等于 1,这样当该数据报抵达途中的第一个路由器时,TTL 的值就被减为 0,导致发生超时错误,因此该路由生成一份 ICMP 超时差错报文返回给源主机。随后,主机将数据报的 TTL 值递增 1,以便 IP 报能传送到下一个路由器,并由下一个路由器生成ICMP 超时差错报文返回给源主机。不断重复这个过程,直到数据报达到最终的目地主机,此时目地主机将返回 ICMP 回显应答消息。这样,源主机只需对返回的每一份 ICMP 报文进行解析处理,就可以掌握数据报从源主机到达目地主机途中所经过的路由信息。

  • 详细设计

(1)加载套接字,创建套接字库;

使用Socket的程序在使用Socket之前必须调用WSAStartup函数,以后应用程序就可以调用所请求的Socket库中的其他Socket函数了。

(2)用inet_addr()将输入的点分十进制的IP地址转换为无符号长整型数,转换不成功时,按域名解析得到IP地址;

gethostbyname()是查找主机名最基本的函数,如果调用成功,就返回一个指向hosten结构的指针,该结构中含有对应于给定主机名的主机名字和地址信息,用来承接域名解析的结构。

(3)设置发送接收超时时间,即请求超时,设置接收、发送超时的套接字;

(4)构造ICMP回显请求消息,并以TTL递增顺序发送报文,填充ICMP报文中每次发送时不变的字段,构造ICMP头;

(5)设置IP报头的TTL字段,填充ICMP报文中每次发送变化的字段,记录序列号和当前时间;

(6)指定对方信息,发送TCP回显请求信息;

sendto()函数利用数据表的方式进行数据传输,指定哪个socket发送给对方

(7)接收ICMP差错报文并进行解析:如果有数据到达,解析数据包,如果到达目的地址,输出IP地址;如果没有数据到达,输出接收超时,递增TTL值,TTL增为最大时,若还没有到达目的地址,退出循环,输出目的地址不在线;

recvform()利用数据报方式进行数据传输,当recvfrom()返回时,(sockaddr*)&from包含实际存入from中的数据字节数。Recvfrom函数返回接收到的字节数或当出现错误时返回-1,并置相应的errno。

  1. 重复(2)-(7),实现查找一个范围内的IP地址。

五、实验结果与分析

设计结果如图2-2所示,输入查找局域网的起始地址和终止地址,通过程序执行,将此范围内所有IP地址的在线情况逐一显示。

六、小结与心得体会

本题目在设计实现过程中遇到的问题算是比较少的,最大的难点就是读懂并理解课程设计指导书中的tracet程序源代码。Tracert程序和ping程序的理论思路上计算机网络课程的时候已经掌握,但我的一个不足,即用代码实现理论知识,在这一方面还需加强。回到本题目,虽然相对于其他三个题目完成得比较快,但其实其中有许多地方可以加以改进,比如可以对在线和不在线的主机数量进行统计,显示检测所花费的时间等。其中仍然有许多不足都需要不断的改进。

实验六:电子邮件客户端程序设计与实现

一、实验题目

电子邮件客户端程序设计与实现

二、实验目的

参照教材 6.5 节原理,设计一个电子邮件客户端程序。

三、总体设计

Telnet

Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式,它为用户提供了在本地计算机上完成远程主机工作的能力。想要使用Telnet发送邮件,首先要确保Telnet服务已开启。以我的Win7系统为例,在“控制面板”中找到“程序”进入“打开或关闭Windows功能”界面,要确保“Telnet客户端”和“Telnet服务器”已勾选。若无勾选则表示Telnet服务未开启,系统则无法识别Telnet命令。

SMTP协议

SMTP的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循SMTP协议的发送邮件服务器。SMTP认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。SMTP已是事实上的E-Mail传输的标准。

Base64编码

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。由于早期的一些邮件服务器只支持文本信息,不支持二进制信息和文件。而base64编码后的结果都是ASCII低128位,也就是都是纯文本的,适合用电子邮件来传送二进制数据。换而言之,当使用电子邮件传输非ASCII字符文本、或非文本格式附件(二进制、声音、图像等)时,如果不用base64编码,则无法传输。

四、详细设计

1.首先连接对应邮箱的smtp服务,打开cmd输入 telnet smtp.qq.com 25连接qq邮箱的smtp服务,连接的ip为smtp.qq.com,并且端口号为25,回车当返回值显示220表示连接成功

  1. 请求命令完成 命令为:ehlo ----(QQ号)
  2. 选择auth login的方式进行登录,返回334表示等待用户输入
  3. 把自己的邮箱账号转化为Base64编码格式,登录自己的邮箱账号,返回334表示继续等待用户输入
  4. 输入自己base64加密的授权码(授权码需要去对应发送邮件内开启),返回235表示登录成功
  5. 输入mail from:<1975261287@qq.com>回车,这里是设置发件人的信息,也就是我们自己的邮箱账号,返回250 OK表示成功
  6. 输入rcpt to:<3138565643@qq.com>回车,这里是设置收件人的信息,是收件人的邮箱账号,然后返回ok

输入data回车,表示开始传送数据(发送邮件)

五、实验结果与分析

首先输入用户名及授权码登录邮件服务器,然后指定收件人邮箱,填写邮件主题和内容,发送邮件。

出现的问题:1.一开始没开启telnet服务导致一直运行不了

2.未用授权码一直运行失败

六、小结与心得体会

本题目遇到的问题主要集中在两个方面。一个是Telnet服务的开启,另一个是base64编码。在Telnet服务开启过程中,我按照网上的教程进入相应的界面打开对应内容,然后在cmd命令行中测试Telnet服务是否开启时,cmd提示不存在对应命令,表示Telnet服务没有开启成功,重复几次都是一样的结果,最后无意中发现原来需要先进入“Windows\System32”目录下才能成功。第二个问题就是base64编码,我的邮箱地址和授权码我都是直接通过在线base64编码将用户名和授权码对应的base64编码写死在程序中,比较具有局限性。

  • 23
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很抱歉,根据提供的引用内容,没有找到计算机网络课程设计的程序清单。引用和引用提到了中南大学的计算机网络课程设计实验报告,但没有具体提到程序清单。引用提到了计算机网络课程设计的考查内容,但同样没有提到程序清单。请提供更多关于程序清单的信息,以便我更好地为您解答。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [计算机网络课程设计实验报告.docx](https://download.csdn.net/download/qq_43966957/87817495)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [计算机网络课程设计实验报告.docx.docx](https://download.csdn.net/download/qq_43966957/87817496)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [计算机网络课程设计.doc](https://download.csdn.net/download/qq_45852929/70123359)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值