资源简介
模拟实现网络中路由器进行分组转发的过程。至少模拟3个路由器,3个路由器两两相通。
程序需要在主机功能中示发送和接收的数据的原始地址和目的地址,在路由器功能中显示接收到的数据的原始地址和目的地址,当前路由表,查找到的路由记录和转发情况。
代码片段和文件信息
#include “host1.h“
#include “ui_host1.h“
#define H1_Ip “127.0.0.1“
#define H2_Ip “127.0.1.1“
#define H3_Ip “127.0.2.1“
#define R1_Ip “127.0.0.11“
#define R2_Ip “127.0.1.11“
#define R3_Ip “127.0.2.11“
#define H1_Port 1111
#define H2_Port 1112
#define H3_Port 1113
#define R1_Port 11111
#define R2_Port 11112
#define R3_Port 11113
QString HSource_ip; //声明发送方IP
QString HS_Text;//声明发送的消息
QString Hdestiny_ip; // 声明目的IP
qint16 Hdestiny_port; //声明主机目的端口
QString HRSource_ip;
QString HR_Text;
QString HRdestiny_ip;
qint16 HRdestiny_port;
int H1choose =1;//初始化选项,选择目的主机,“2”为H2,“3”为H3
Host1::Host1(QWidget *parent) :
QMainWindow(parent)
ui(new Ui::Host1)
{
ui->setupUi(this);
this->H1_Socket = new QTcpSocket(this);//实例化一个套接字对象
this->H1_Server = new QTcpServer(this);//实例化 H1 Sever
ui->SendEdit->setEnabled(false);//当未连接路由器时设置发送按钮,发送框以及显示窗口为不可用
ui->Send->setEnabled(false);
ui->Send_text->setEnabled(false);
NewListen();
}
void Host1::NewListen()
{
//监听是否有客户端来访,且对任何来访者监听,端口为R1_Port
if(!H1_Server->listen(QHostAddress(H1_Ip)H1_Port))
{
return;
}
else
{
connect(H1_Server SIGNAL(newConnection()) this SLOT(acceptConnection()));
}
}
void Host1::acceptConnection()
{
H1_Socket = H1_Server->nextPendingConnection();
connect(H1_Socket SIGNAL(readyRead()) this SLOT(revdata()));
}
void Host1::revdata()
{
//接受信息
QByteArray datas = H1_Socket->readAll();
HR_Text = QString(datas).section(“/“11);
HRdestiny_ip = QString(datas).section(“/“22);
HRdestiny_port = QString(datas).section(“/“33).toInt();
HRSource_ip = QString(datas).section(“/“44);
ui->Destiny->setText(HRdestiny_ip);
ui->Source->setText(HRSource_ip);
QString FromHost;
if(HRSource_ip == H2_Ip)
FromHost = “H2->H1:“;
if(HRSource_ip == H3_Ip)
FromHost = “H3->H1:“;
ui->Receive->setText(FromHost + HR_Text);
}
Host1::~Host1()
{
delete ui;
}
void Host1::on_Quit_clicked()
{
this->close();
}
void Host1::on_Host2_clicked()
{
if(H1choose == 3)
{
ui->Host3->setCheckState(Qt::Unchecked);
}
Hdestiny_ip = H2_Ip;
Hdestiny_port = H2_Port;
H1choose = 2;
}
void Host1::on_Host3_clicked()
{
if(H1choose == 2)
{
ui->Host2->setCheckState(Qt::Unchecked);
}
Hdestiny_ip = H3_Ip;
Hdestiny_port = H3_Port;
H1choose = 3;
}
void Host1::not_Connected()
{
QMessageBox::information(this“连接状态““H1连接失败!!“);
}
void Host1::on_connect_clicked()
{
H1_Socket->abort();//断开所有连接
H1_Socket->connectToHost(QHostAddress(H1_Ip)R1_Port); //原本地址应该为R1_IP,为了连接本机,用H1_IP“127.0.0.1”
bool connected = H1_Socket->waitForConnected();
if(!connected){
not_Connected();//连接失败,提示
}
else//连接成功将发送按钮和发送框以及显示框置为可用
{
ui->SendEdit->setEnabled(true);
ui->Send->setEnabled(true);
ui->Send_text->setEnabled(true);
}
}
void Host1::on_Send_clicked()
{
/*//获取本机计算机名称
QStri
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-01-16 16:14 Router_Socket\
文件 599 2016-12-21 22:10 Router_Socket\Network2.pro
文件 18061 2016-12-23 13:05 Router_Socket\Network2.pro.user
文件 4471 2016-12-21 21:41 Router_Socket\host1.cpp
文件 649 2016-12-21 21:13 Router_Socket\host1.h
文件 5705 2016-12-21 15:30 Router_Socket\host1.ui
文件 4114 2016-12-21 21:30 Router_Socket\host2.cpp
文件 648 2016-12-21 19:57 Router_Socket\host2.h
文件 5171 2016-12-21 15:30 Router_Socket\host2.ui
文件 4042 2016-12-21 23:24 Router_Socket\host3.cpp
文件 648 2016-12-21 22:20 Router_Socket\host3.h
文件 5237 2016-12-21 22:09 Router_Socket\host3.ui
文件 418 2016-12-21 22:33 Router_Socket\main.cpp
文件 4452 2016-12-22 13:47 Router_Socket\router1.cpp
文件 547 2016-12-21 23:01 Router_Socket\router1.h
文件 4763 2016-12-21 20:49 Router_Socket\router1.ui
文件 4401 2016-12-22 13:56 Router_Socket\router2.cpp
文件 525 2016-12-21 20:02 Router_Socket\router2.h
文件 5016 2016-12-21 19:34 Router_Socket\router2.ui
文件 4322 2016-12-22 13:56 Router_Socket\router3.cpp
文件 526 2016-12-21 22:29 Router_Socket\router3.h
文件 4533 2016-12-21 22:20 Router_Socket\router3.ui
- 上一篇:HD900开发包.rar
- 下一篇:外排序初始游程的生成
评论
共有 条评论