当前位置: 首页 > wzjs >正文

网站建设的设计方案seo基础知识培训

网站建设的设计方案,seo基础知识培训,典型b2c模式的网站,xml网站地图格式一 基本网络端口 1 网络编程基本概念 通讯方式:信息的通讯时通过网络来进行,通讯方式有两种,TCP和UDP通信,TCP通讯是专用通道,指定某个信息只能走某个通道,UDP则是非专用通道,比如一个车队&am…

一 基本网络端口

1 网络编程基本概念

  • 通讯方式:信息的通讯时通过网络来进行,通讯方式有两种,TCP和UDP通信,TCP通讯是专用通道,指定某个信息只能走某个通道,UDP则是非专用通道,比如一个车队,有1~3号车,从北京到成都,TCP通道则是,3个车一起走指定的一条线路,UDP通道则是,3量车可以走不同的线路,无所谓先后顺序到达北京,根据途径路线的拥堵程度,来进行路线的选择
  • 什么是服务器和客户端:客户端主动发起连接,连接到服务器可以开启通讯,反过来不可以,一个服务器,服务多个客户端

2 网络端口访问案例

  • 知识点1:UI界面布局如果将组件设置顶端对齐
    在这里插入图片描述
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QHBoxLayout *layout  = new QHBoxLayout(this);layout->addWidget(ui->groupBox, 0,Qt::AlignTop);layout->addWidget(ui->plainTextEdit);this->centralWidget()->setLayout(layout);
}

在这里插入图片描述

  • 知识点2:获取指定域名的Ip地址的时候,需要定义槽函数,当前案例定义的槽函数void lookUpHost(const QHostInfo &info );
void MainWindow::on_pushButtonGivenSpace_clicked()
{//获取填写的域名QString name = ui->lineEdit->text();if(name.length() == 0){return;}ui->textPrint->append("正在查找" + name +"的IP地址。。。");QHostInfo::lookupHost(name, this,SLOT(lookUpHost(QHostInfo)));
}
  • 知识点3:使用到网络模块,需要在项目.por文件中添加network关键字
    在这里插入图片描述

  • 代码

  • mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QHostInfo>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButtonHostname_clicked();void on_pushButtonHostname_2_clicked();void on_pushButtonHostname_3_clicked();void on_pushButtonGivenSpace_clicked();void lookUpHost(const  QHostInfo &info );void on_pushButtonIPS_clicked();void on_pushButtonIPSinter_clicked();void on_pushButtonClear_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
  • mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QHBoxLayout>
#include <QHostInfo>
#include <QNetworkInterface>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QHBoxLayout *layout  = new QHBoxLayout(this);layout->addWidget(ui->groupBox, 0,Qt::AlignTop);layout->addWidget(ui->textPrint);this->centralWidget()->setLayout(layout);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButtonHostname_clicked()
{//获取本地主机名QString hostname = QHostInfo::localHostName();ui->textPrint->append("获取本地主机名 : " + hostname);
}void MainWindow::on_pushButtonHostname_2_clicked()
{QString hostname = QHostInfo::localHostName();QHostInfo iP_V4 = QHostInfo::fromName(hostname);  //获取指定主机的信息QList<QHostAddress> addrlist = iP_V4.addresses();if(!addrlist.isEmpty()){for(int i =0 ;i <addrlist.count(); i++){QHostAddress address =addrlist[i];if(address.protocol() == QAbstractSocket::IPv4Protocol){ui->textPrint->append(address.toString());}}}
}void MainWindow::on_pushButtonHostname_3_clicked()
{QString hostname = QHostInfo::localHostName();QHostInfo iP_V6 = QHostInfo::fromName(hostname);  //获取指定主机的信息QList<QHostAddress> addrlist = iP_V6.addresses();if(!addrlist.isEmpty()){for(int i =0 ;i <addrlist.count(); i++){QHostAddress address =addrlist[i];if(address.protocol() == QAbstractSocket::IPv6Protocol){ui->textPrint->append(address.toString());}}}
}void MainWindow::on_pushButtonGivenSpace_clicked()
{//获取填写的域名QString name = ui->lineEdit->text();if(name.length() == 0){return;}ui->textPrint->append("正在查找" + name +"的IP地址。。。");QHostInfo::lookupHost(name, this,SLOT(lookUpHost(QHostInfo)));
}void MainWindow::lookUpHost(const QHostInfo &info)
{QList<QHostAddress> addrlist = info.addresses();if(!addrlist.isEmpty()){for(int i =0 ;i <addrlist.count(); i++){QHostAddress address =addrlist[i];if(address.protocol() == QAbstractSocket::IPv4Protocol){ui->textPrint->append(address.toString());}}}
}void MainWindow::on_pushButtonIPS_clicked()
{QList<QHostAddress> addrlist = QNetworkInterface::allAddresses();if(!addrlist.isEmpty()){for(int i =0 ;i <addrlist.count(); i++){QHostAddress address =addrlist[i];if(address.protocol() == QAbstractSocket::IPv4Protocol){ui->textPrint->append(address.toString());}}}
}void MainWindow::on_pushButtonIPSinter_clicked()
{QList<QNetworkInterface> addrlist =  QNetworkInterface::allInterfaces();if(!addrlist.isEmpty()){for(int i =0 ;i <addrlist.count(); i++){QNetworkInterface interface =addrlist[i];if(interface.isValid()){ui->textPrint->append("设备名称:" + interface.humanReadableName());ui->textPrint->append("硬件地址:" + interface.hardwareAddress());//一个网卡可以有多个IP地址QList<QNetworkAddressEntry> list2 = interface.addressEntries();for(int j =0 ;j <list2.count(); j++){QNetworkAddressEntry entry = list2[j];ui->textPrint->append("\tIP地址:" + entry.ip().toString());ui->textPrint->append("\t子掩码:" + entry.netmask().toString());ui->textPrint->append("\t广播地址:" + entry.broadcast().toString());}}}}
}void MainWindow::on_pushButtonClear_clicked()
{ui->textPrint->clear();
}

3 服务器和客户端访问案例

在这里插入图片描述

3.1 项目添加关键字

在这里插入图片描述

3.2 定义服务器 QTcpServer *tcpserver;,并获取当前的服务器的IP地址,使其出现在comboBox中,服务器的连接需要定义槽函数,newConnection()QTcpServer类中的信号;信号槽的实现
    //setCentralWidget(ui->plainTextEdit);//获取服务器端,可选得IP地址QHostInfo hostINFO = QHostInfo::fromName(QHostInfo::localHostName());QList<QHostAddress> addlist = hostINFO.addresses();if(!addlist.isEmpty()){for(int i = 0; i < addlist.count(); i++){QHostAddress address = addlist[i];if(address.protocol() == QAbstractSocket::IPv4Protocol){ui->comboBox->addItem(address.toString());}}}//用来做测试的ui->comboBox->addItem("127.0.0.1");tcpserver = new QTcpServer(this);connect(tcpserver,SIGNAL(newConnection()),this,SLOT(on_newConnection()));
3.3 服务器中信号槽的实现,需要定义套接字QTcpServer *tcpserver;,服务器里面对每一个客户端,都会开启一个新的套接字来完成该客户端的信号的发送和接收,所以信号的连接与否等操作,都需要定义一个相应的套接字的信号槽来进行实现
void MainWindow::on_newConnection()
{tcpSocket = tcpserver->nextPendingConnection();//当有数据可以读的是,就读数据,使用信号槽connect(tcpSocket,SIGNAL(readyRead()), this, SLOT(on_readyRead()));connect(tcpSocket,SIGNAL(connected()), this, SLOT(on_connected()));connect(tcpSocket,SIGNAL(disconnected()), this, SLOT(on_disonnected()));connect(tcpSocket,SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(on_stateChanged(QAbstractSocket::SocketState)));on_stateChanged(tcpSocket->state());
}
3.4 代码测试,当前所写代码,既可以当成客户端,也可以当成服务器,假设将其当成服务器,如果要测试代码,还需要写一个客户端来进行测试,但是无法保证客户端的正确性,可以借助TCP调试软件来进行调试,当前下载软件如下,在电脑本身的应用商店下载即可,安装完毕之后直接打开即可

在这里插入图片描述

3.4.1 先运行QT代码,选择测试端口,启动TCP调试软件,在右侧选择TCP Client,以及远程端选择127.0.0.1Local不用管,然后点击QT代码运行,然后点击软件右侧的Connect`

在这里插入图片描述
在这里插入图片描述

3.4.2 qt端发送信号,直接在发送前的条形框里面输入信号,点击发送即可,会在调试软件右侧的大框里面显现出信号

在这里插入图片描述

3.4.3 调试软件向QT窗口发送信号,因为每次只发送一行信号,在右下角的框里面输入信号,无法回车,直接点发送,在QT窗口端是没有反应的,勾选Send as Hex,119会自动跳变成编码,在编码后添加0A, 然后再取消勾选,会看到鼠标换行了,此时再点击发送,会看到QT窗口端接收到的信号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码
  • mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QTcpServer>
#include <QTcpSocket>
#include  <QLabel>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;QTcpServer *tcpserver;QTcpSocket *tcpSocket;  //tcp套接字,服务器里面对每一个客户端,都会开启一个新的套接字来完成该客户端的信号的发送和接收QLabel *label;  //状态栏的标签QLabel *labelSockt;  //状态栏的标签
private slots:void on_newConnection();void on_readyRead();void on_connected();void on_disonnected();void on_stateChanged(QAbstractSocket::SocketState);void on_actionJianTing_triggered();void on_pushButton_clicked();void on_actionStop_triggered();void on_actionClear_triggered();void on_actionExit_triggered();
};
#endif // MAINWINDOW_H
  • mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QHostInfo>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//setCentralWidget(ui->plainTextEdit);//获取服务器端,可选得IP地址QHostInfo hostINFO = QHostInfo::fromName(QHostInfo::localHostName());QList<QHostAddress> addlist = hostINFO.addresses();if(!addlist.isEmpty()){for(int i = 0; i < addlist.count(); i++){QHostAddress address = addlist[i];if(address.protocol() == QAbstractSocket::IPv4Protocol){ui->comboBox->addItem(address.toString());}}}//用来做测试的ui->comboBox->addItem("127.0.0.1");tcpserver = new QTcpServer(this);connect(tcpserver,SIGNAL(newConnection()),this,SLOT(on_newConnection()));label = new QLabel("监听状态:");label->setMinimumWidth(200);ui->statusbar->addWidget(label);labelSockt = new QLabel("套接字状态:");labelSockt->setMinimumWidth(200);ui->statusbar->addWidget(labelSockt);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_newConnection()
{tcpSocket = tcpserver->nextPendingConnection();//当有数据可以读的是,就读数据,使用信号槽connect(tcpSocket,SIGNAL(readyRead()), this, SLOT(on_readyRead()));connect(tcpSocket,SIGNAL(connected()), this, SLOT(on_connected()));connect(tcpSocket,SIGNAL(disconnected()), this, SLOT(on_disonnected()));connect(tcpSocket,SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(on_stateChanged(QAbstractSocket::SocketState)));on_stateChanged(tcpSocket->state());
}void MainWindow::on_readyRead()
{while(tcpSocket->canReadLine()){ui->plainTextEdit->appendPlainText("on_readyRead [收到] " + tcpSocket->readLine());}
}void MainWindow::on_connected()
{ui->plainTextEdit->appendPlainText("\n on_connected:客户端已经接入");//客户端地址信息ui->plainTextEdit->appendPlainText("客户端地址: " +tcpSocket->peerAddress().toString());ui->plainTextEdit->appendPlainText("客户端口号:" +QString::number(tcpSocket->peerPort()));
}void MainWindow::on_disonnected()
{ui->plainTextEdit->appendPlainText("\n客户端已经断开连接");tcpSocket->deleteLater();
}void MainWindow::on_stateChanged(QAbstractSocket::SocketState status)
{switch(status){case QAbstractSocket::UnconnectedState:labelSockt->setText("套接字状态:未连接");break;case QAbstractSocket::HostLookupState:labelSockt->setText("套接字状态:HostLookupState");break;case QAbstractSocket::ConnectingState:labelSockt->setText("套接字状态:ConnectingState");break;case QAbstractSocket::ConnectedState:labelSockt->setText("套接字状态:ConnectedState");break;case QAbstractSocket::BoundState:labelSockt->setText("套接字状态:BoundState");break;case QAbstractSocket::ListeningState:labelSockt->setText("套接字状态:ListeningState");break;case QAbstractSocket::ClosingState:labelSockt->setText("套接字状态:ClosingState");break;default:break;}}void MainWindow::on_actionJianTing_triggered()
{QString ip = ui->comboBox->currentText();quint16 port = ui->spinBox->value();QHostAddress addr(ip);tcpserver->listen(addr,port);ui->plainTextEdit->appendPlainText("on_actionJianTing_triggered 开始监听,等待客户端发起连接...");ui->plainTextEdit->appendPlainText("服务器地址:" +tcpserver->serverAddress().toString());ui->plainTextEdit->appendPlainText("服务器端口:" +QString::number(tcpserver->serverPort()));ui->actionStop->setEnabled(true);ui->actionJianTing->setEnabled(false);label->setText("监听状态:正在监听");
}void MainWindow::on_pushButton_clicked()
{//发送一行字符串QString msg = ui->lineEdit->text();QByteArray str = msg.toUtf8();str.append("\n");//发送数据tcpSocket->write(str);
}void MainWindow::on_actionStop_triggered()
{if(tcpserver->isListening()){tcpserver->close();ui->actionJianTing->setEnabled(true);ui->actionStop->setEnabled(false);label->setText("监听状态:停止监听");}}void MainWindow::on_actionClear_triggered()
{ui->plainTextEdit->clear();
}void MainWindow::on_actionExit_triggered()
{this->close();
}

4 代码实现客户端和服务器,并相互发送信号进行测试

在这里插入图片描述

  • 服务器代码就是案例3中的代码,注意,运行的时候,要同时打开两个QT界面
  • 客户端代码如下,过程基本上同案例3
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QTcpSocket>
#include <QLabel>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;QTcpSocket *tcpScoket;QLabel *labelSocket;
private slots:void on_readyRead();void on_connected();void on_disonnected();void on_stateChanged(QAbstractSocket::SocketState);void on_actionConnect_triggered();void on_actionDisconnect_triggered();void on_actionClear_triggered();void on_actionExit_triggered();void on_pushButton_clicked();protected:void closeEvent(QCloseEvent *event); //父类的虚函数,用于关闭窗口
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QHostAddress>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//创建客户端的套接字对象tcpScoket = new QTcpSocket(this);connect(tcpScoket,SIGNAL(connected()), this, SLOT(on_connected()));connect(tcpScoket,SIGNAL(disconnected()), this, SLOT(on_disonnected()));connect(tcpScoket,SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(on_stateChanged(QAbstractSocket::SocketState)));connect(tcpScoket,SIGNAL(readyRead()), this, SLOT(on_readyRead()));labelSocket = new QLabel("套接字状态:");ui->statusbar->addWidget(labelSocket);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_connected()
{ui->plainTextEdit->appendPlainText("已连接到服务器");ui->plainTextEdit->appendPlainText("服务器地址:" +tcpScoket->peerAddress().toString());ui->plainTextEdit->appendPlainText("服务器端口:" +QString::number(tcpScoket->peerPort()));ui->actionConnect->setEnabled(false);ui->actionDisconnect->setEnabled(true);}void MainWindow::on_disonnected()
{ui->plainTextEdit->appendPlainText("服务器断开");ui->actionConnect->setEnabled(true);ui->actionDisconnect->setEnabled(false);
}void MainWindow::on_stateChanged(QAbstractSocket::SocketState status)
{switch(status){case QAbstractSocket::UnconnectedState:labelSocket->setText("套接字状态:未连接");break;case QAbstractSocket::HostLookupState:labelSocket->setText("套接字状态:HostLookupState");break;case QAbstractSocket::ConnectingState:labelSocket->setText("套接字状态:ConnectingState");break;case QAbstractSocket::ConnectedState:labelSocket->setText("套接字状态:ConnectedState");break;case QAbstractSocket::BoundState:labelSocket->setText("套接字状态:BoundState");break;case QAbstractSocket::ListeningState:labelSocket->setText("套接字状态:ListeningState");break;case QAbstractSocket::ClosingState:labelSocket->setText("套接字状态:ClosingState");break;default:break;}
}void MainWindow::on_readyRead()
{while(tcpScoket->canReadLine()){ui->plainTextEdit->appendPlainText("收到 : " + tcpScoket->readLine());}
}
void MainWindow::on_actionConnect_triggered()
{QString ip = ui->lineEditAdress->text();quint16  port = ui->spinBox->value();tcpScoket->connectToHost(ip,port);
}void MainWindow::on_actionDisconnect_triggered()
{if(tcpScoket->state() == QAbstractSocket::ConnectedState){tcpScoket->disconnectFromHost();}
}void MainWindow::on_actionClear_triggered()
{ui->plainTextEdit->clear();
}void MainWindow::on_actionExit_triggered()
{this->close();
}void MainWindow::closeEvent(QCloseEvent *event)
{if(tcpScoket->state() == QAbstractSocket::ConnectedState){tcpScoket->disconnectFromHost();}event->accept();
}void MainWindow::on_pushButton_clicked()
{QString MSG = ui->lineEditDiliver->text();QByteArray str = MSG.toUtf8();str.append("\n");tcpScoket->write(str);ui->plainTextEdit->appendPlainText("发送:" + MSG);ui->lineEditDiliver->clear();ui->lineEditDiliver->setFocus();
}
http://www.dtcms.com/wzjs/6140.html

相关文章:

  • 雅奇小蘑菇做网站好不好用个人网站设计毕业论文
  • 网站开发项目设计文档泰安网站优化公司
  • nas做网站服务器seo网站推广杭州
  • 建网站维护需要多少钱虚拟主机搭建网站
  • 做外语网站的公司yandx引擎入口
  • 珠海做网站优化网站建设方案及报价
  • 班级网站怎么做网站免费推广网站
  • 广告网站建设流程中文域名的网站
  • 福田网站建设新闻网络推广专员所需知识
  • 电商网站开发意义嘉兴seo外包
  • 用dw个人网站怎么建立seo学习网站
  • 百度这个网站怎么做windows7系统优化工具
  • 网站开发设计手册营销网站建设教学
  • 网站建设公司如何挖掘客户交换链接的作用
  • dedecms网站的源码如何安装磁力猫torrent kitty
  • 郑州英语网站建设网站设计与建设
  • 呢喃wordpress 模板合肥网站seo费用
  • 西安博威建设工程有限公司招聘网站做网站seo优化
  • 展示用网站模板网站优化 福州
  • 做网站开发需要学什么软件厦门seo优化外包公司
  • 石家庄学网站建设如何进行百度推广
  • 哪些ppt网站是免费的做网站需要哪些技术
  • 做网站被黑后怎么办网络推广是啥
  • 外贸发货做网站怎么写开通网站需要多少钱
  • 龙岗网站设计公司价格营销型网站建设步骤
  • 法院网站建设情况搜索引擎优化指的是什么
  • 赌博网站怎么做的免费个人网站注册
  • 汕头网站快速排名搜索数据
  • 青羊区网站建设百度竞价产品
  • 做网站关键词必须要中文网址西安今日头条新闻消息