南京邮电大学软件设计TCPIP网络通信程序设计实验报告Word格式文档下载.docx

上传人:b****3 文档编号:13880653 上传时间:2022-10-14 格式:DOCX 页数:34 大小:1.77MB
下载 相关 举报
南京邮电大学软件设计TCPIP网络通信程序设计实验报告Word格式文档下载.docx_第1页
第1页 / 共34页
南京邮电大学软件设计TCPIP网络通信程序设计实验报告Word格式文档下载.docx_第2页
第2页 / 共34页
南京邮电大学软件设计TCPIP网络通信程序设计实验报告Word格式文档下载.docx_第3页
第3页 / 共34页
南京邮电大学软件设计TCPIP网络通信程序设计实验报告Word格式文档下载.docx_第4页
第4页 / 共34页
南京邮电大学软件设计TCPIP网络通信程序设计实验报告Word格式文档下载.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

南京邮电大学软件设计TCPIP网络通信程序设计实验报告Word格式文档下载.docx

《南京邮电大学软件设计TCPIP网络通信程序设计实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《南京邮电大学软件设计TCPIP网络通信程序设计实验报告Word格式文档下载.docx(34页珍藏版)》请在冰豆网上搜索。

南京邮电大学软件设计TCPIP网络通信程序设计实验报告Word格式文档下载.docx

Qt数据库中提供QtNetworkModule中的QHostInfo、QHostAddress、QNetworkInterface和QNetAddressEntry等类来查询网络参数。

QNetworkInterface类提供了程序所运行的主机IP地址和网络接口信息的列表,在一个网络接口信息中,包括一个或多个IP地址,每一个IP地址又包括和它相关的子网掩码和广播地址。

它们三者别封装在一个对象中QNetworkAddressEntry,网络接口信息也包括了硬件地址信息。

[1]

完成界面

运行出结果

3、关键实现代码及注解

1.在NetworkI文件中,添加

QT+=network

2.在头文件中添加如下代码:

#include<

QHostInfo>

QNetworkInterface>

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<

QHostAddress>

listAddress=hostInfo.addresses();

//取得主机的IP地址列表

if(!

listAddress.isEmpty())//取得的主机IP地址列表可能为空。

在不为空的情形下利用第一个IP地址。

{

LineEditAddress->

setText(listAddress.first().toString());

}

}

注释见上。

[2]

5.slotDetail()函数取得与网络接口相关的信息,具体实现代码如下:

slotDetail()//取得与网络接口相关的信息

QStringdetail="

"

;

list=QNetworkInterface:

allInterfaces();

//QNetworkInterface类提供了一个主机IP地址和网络接口的列表

for(inti=0;

i<

list.count();

i++)

QNetworkInterfaceinterface=list.at(i);

detail=detail+u8"

设备:

+interface.name()+"

\n"

//取得网络接口的名称

硬件地址:

+interface.hardwareAddress()+"

//取得网络接口的硬件地址

QNetworkAddressEntry>

entryList=interface.addressEntries();

//每一个网络接口包括0个或多个IP地址,每一个IP地址有选择性地与一个子网掩码和(或)一个广播地址相关联

//QNetworkAddressEntry类存储了被网络接口支持的一个IP地址,同时还包括与之相关的子网掩码和广播地址

for(intj=0;

j<

entryList.count();

j++)

QNetworkAddressEntryentry=entryList.at(j);

detail=detail+"

\t"

+u8"

IP地址:

+entry.ip().toString()+"

子网掩码:

+mask().toString()+"

广播地址:

+entry.broadcast().toString()+"

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文件传输结构

效劳器端:

1.在UdpServer.pro中添加:

2.在头文件udpserver.h中添加需要的槽函数:

QUdpSocket>

声明,为了在Line21-32添加槽函数

QTimer>

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()//“开始”按钮函数的设定

isStarted)

StartBtn->

setText(u8"

停止"

);

timer->

start(1000);

isStarted=true;

else

开始"

isStarted=false;

stop();

5.timeout()函数完成了向端口发送广播消息的功能:

timeout()//完成向端口发送广播信息的功能

QStringmsg=TextLineEdit->

text();

intlength=0;

if(msg=="

return;

if((length=udpSocket->

writeDatagram(msg.toLatin1(),msg.length(),QHostAddress:

Broadcast,port))!

=msg.length())

//QHostAddress:

Broadcast指定向广播地址发送

客户端:

1.在中

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

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

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