南京邮电大学软件设计TCPIP网络通信程序设计实验报告.docx
- 文档编号:959393
- 上传时间:2022-10-14
- 格式:DOCX
- 页数:34
- 大小:1.77MB
南京邮电大学软件设计TCPIP网络通信程序设计实验报告.docx
《南京邮电大学软件设计TCPIP网络通信程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《南京邮电大学软件设计TCPIP网络通信程序设计实验报告.docx(34页珍藏版)》请在冰豆网上搜索。
南京邮电大学软件设计TCPIP网络通信程序设计实验报告
201/201学年第二学期
课程设计实验报告
模块名称TCP/IP网络通信程序设计
专业
学生班级
学生学号
学生姓名
指导教师
QT5.6环境下的源代码
题目1获取运算机的名称和IP地址
一、设计内容
获取运算机的名称和IP地址实验
编写程序实现下述功能:
获取运算机的名称和IP地址
二、设计分析论述及程序实现流程框图
QtCreator是一个用于Qt开发的轻量级跨平台集成开发环境。
QtCreator可带来两大关键益处:
提供首个专为支持跨平台开发而设计的集成开发环境(IDE),并确保第一次接触Qt框架的开发人员能迅速上手和操作。
即便不开发Qt应用程序,QtCreator也是一个简单易用且功能壮大的IDE。
Qt数据库中提供QtNetworkModule中的QHostInfo、QHostAddress、QNetworkInterface和QNetAddressEntry等类来查询网络参数。
QNetworkInterface类提供了程序所运行的主机IP地址和网络接口信息的列表,在一个网络接口信息中,包括一个或多个IP地址,每一个IP地址又包括和它相关的子网掩码和广播地址。
它们三者别封装在一个对象中QNetworkAddressEntry,网络接口信息也包括了硬件地址信息。
[1]
完成界面
运行出结果
3、关键实现代码及注解
1.在NetworkI文件中,添加
QT+=network
2.在头文件中添加如下代码:
#include
#include
public:
voidgetHostInformation();
publicslots:
voidslotDetail();
对QHostInfo、QNetworkInterface进行声明,添加槽函数。
3.在源文件中添加代码。
其中在构造函数的最后添加:
getHostInformation();//用于取得主机信息
connect(detailBtn,SIGNAL(clicked()),this,SLOT(slotDetail()));
4.getHostInformation()函数用于取得主机信息。
具体实现代码如下:
voidNetworkInformation:
:
getHostInformation()
{
QStringlocalHostName=QHostInfo:
:
localHostName();//取得本机主机名
LineEditLocalHostName->setText(localHostName);
QHostInfohostInfo=QHostInfo:
:
fromName(localHostName);//依照主机名取得相关主机信息,包括IP地址等。
QHostInfo:
:
fromName()函数通过主机名查找IP地址信息。
QList
if(!
listAddress.isEmpty())//取得的主机IP地址列表可能为空。
在不为空的情形下利用第一个IP地址。
{
LineEditAddress->setText(listAddress.first().toString());
}
}
注释见上。
[2]
5.slotDetail()函数取得与网络接口相关的信息,具体实现代码如下:
voidNetworkInformation:
:
slotDetail()//取得与网络接口相关的信息
{
QStringdetail="";
QList
:
allInterfaces();//QNetworkInterface类提供了一个主机IP地址和网络接口的列表
for(inti=0;i { QNetworkInterfaceinterface=list.at(i); detail=detail+u8"设备: "+interface.name()+"\n";//取得网络接口的名称 detail=detail+u8"硬件地址: "+interface.hardwareAddress()+"\n";//取得网络接口的硬件地址 QList //每一个网络接口包括0个或多个IP地址,每一个IP地址有选择性地与一个子网掩码和(或)一个广播地址相关联 //QNetworkAddressEntry类存储了被网络接口支持的一个IP地址,同时还包括与之相关的子网掩码和广播地址 for(intj=0;j { QNetworkAddressEntryentry=entryList.at(j); detail=detail+"\t"+u8"IP地址: "+entry.ip().toString()+"\n"; detail=detail+"\t"+u8"子网掩码: "+mask().toString()+"\n"; detail=detail+"\t"+u8"广播地址: "+entry.broadcast().toString()+"\n"; } } QMessageBox: : information(this,tr("Detail"),detail); } 4、程序运行测试与结果 图1-1获取本机网络信息图1-2获取本机详细网络信息 五、程序设计中碰到的问题及改良思路 1.“详细”那个按钮单击时,没有明显的痕迹,故后期添加了一些特效。 将PushButton的属性checkable设置为真,那么运行时鼠标单击一下,按钮的颜色会变淡,再单击一下又会变亮,它是以颜色的的深浅来提示它的toggle的。 菜单栏中的一个选项,一样是用trigger来发射信号。 2.报错显现“cannotfindfilemain.pro ”,缘故是QT所利用的工程,目录树中显现汉字,空格等。 题目2大体C/S模式的通信实验 一、设计内容 大体C/S模式的通信实验 编写程序实现一个基于UDP模式的通信程序和一个基于TCP模式的通信程序。 大体要求: 能输入运算机的IP地址和端口号,能输入、发送文本信息和显示同意的文本信息。 二、设计分析论述及程序实现流程框图 一、基于UDP模式 在UDP方式下,它是一个不靠得住的,面向数据报的无连接协议。 客户端并非与效劳器成立连接,它只负责挪用发送函数向效劳器发出数据报。 一样,效劳器也不从客户端接收连接,只负责挪用接收函数,等待来自某客户端的数据抵达。 Qt中通过QupSocket类实现UDP协议的编程。 Socket简单地说,确实是一个IP地址加一个port端口。 因为要传输数据,就要明白往哪个机子上传送,而IP地址确信了一台主机,可是这台机子上可能运行着各类各样的网络程序,这时就要利用一个端口来指定UDP程序。 因此说,Socket指明了数据报传输的途径。 编写两个程序,一个用来发送数据报,叫做客户端;另一个用来接收数据报,叫做效劳器端,均应用UDP协议。 如此也就组成了所谓的C/S(客户端/效劳器)编程模型。 第一做效劳器端。 先在头文件中声明需要的各类控件,完成对应源代码,从而先形成一个效劳器的界面。 然后在头文件中添加需要的槽函数,在源文件中添加声明,设置好端口参数(本程序设置为5555)而且创建QUdpSocket,使程序能够定向发送广播地址。 接下来做客户端。 一样先在头文件中声明需要的各类控件,完成对应源代码,从而形成一个客户端的界面。 然后在构造函数中设置相对应的端口号参数(5555),概念CloseBtnClicked()和dataReceived()函数,最后实现客户端的功能。 图2-1UDP协议工作原理 图2-2UDP客户端与效劳器之间的交互方式 二、基于TCP模式 1. 图2-3TCP协议工作原理 2. 图2-4TCP客户端与效劳器间的交互时序 3. 图2-5TCP文件传输结构 3、关键实现代码及注解 一、基于UDP模式 效劳器端: 1.在UdpServer.pro中添加: QT+=network 2.在头文件udpserver.h中添加需要的槽函数: #include #include publicslots: voidStartBtnClicked(); voidtimeout(); private: QLabel*TimerLabel; QLineEdit*TextLineEdit; QPushButton*StartBtn; QVBoxLayout*mainLayout; intport; boolisStarted; QUdpSocket*udpSocket; QTimer*timer; : connect(StartBtn,SIGNAL(clicked()),this,SLOT(StartBtnClicked())); port=6665;//设置UDP的端口号参数,效劳器按时向此端口发送广播消息 isStarted=false; udpSocket=newQUdpSocket(this); timer=newQTimer(this);//创建一个QUdpSocket connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));//按时发送广播信息 4.StartBtnClicked()函数的具体代码: voidUdpServer: : StartBtnClicked()//“开始”按钮函数的设定 { if(! isStarted) { StartBtn->setText(u8"停止"); timer->start(1000); isStarted=true; } else { StartBtn->setText(u8"开始"); isStarted=false; timer->stop(); } } 5.timeout()函数完成了向端口发送广播消息的功能: voidUdpServer: : timeout()//完成向端口发送广播信息的功能 { QStringmsg=TextLineEdit->text(); intlength=0; if(msg=="") { return; } if((length=udpSocket->writeDatagram(msg.toLatin1(),msg.length(),QHostAddress: : Broadcast,port))! =msg.length()) { return; } //QHostAddress: : Broadcast指定向广播地址发送 } 客户端: 1.在中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 南京 邮电大学 软件设计 TCPIP 网络 通信 程序设计 实验 报告