国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

4412開發(fā)板Qt網(wǎng)絡(luò)編程-TCP實(shí)現(xiàn)服務(wù)器和客戶端

發(fā)布時間:2021-4-28 14:53    發(fā)布者:落風(fēng)
網(wǎng)絡(luò)編程有 TCP 和 UDP,TCP 編程需要用到倆個類:QTcpServer 和 QTcpSocket。

1 TCP 實(shí)現(xiàn)服務(wù)器和客戶端
TCP 協(xié)議(Transmission Control Protocol)是一種面向連接的,可靠的,基于字節(jié)流的傳輸層通信協(xié)議,傳輸數(shù)據(jù)穩(wěn)定可靠。
在 help 索引中搜索到如圖 兩個重要類:


服務(wù)器編程中兩個類都會用到,客戶端編程中只會用到 QTcpSocket 對象。
本實(shí)驗(yàn)中對 QTcpServer 類的基本使用:
(1)監(jiān)聽客戶端連接。
(2)每當(dāng)有新的客戶端連接服務(wù)器的時候,會自動觸發(fā)信號,
(3)根據(jù)當(dāng)前連接上的新的客戶端創(chuàng)建一個 Socket 對象,將數(shù)據(jù)的收發(fā)動作交給 socket 套 接字去處理。
(4)關(guān)閉服務(wù)器 close();
對 QTcpSocket 類的基本使用:
(1)服務(wù)器端:有新連接時獲取連接狀態(tài),綁定 socket 。
(2)客戶端:通過 socket 連接服務(wù)器,連接成功觸發(fā)信號。.

(3)當(dāng)有數(shù)據(jù)到來時會觸發(fā)信號,用 readAll()讀取。
(4)通過讀寫 socket 收發(fā)數(shù)據(jù)。
具體步驟:
步驟一:創(chuàng)建工程,在工程文件.pro 中添加 network,如圖:


步驟二:設(shè)計 ui 界面,
1. 在屬性編輯欄設(shè)置主窗口大小:


2. 添加組件
接收窗口: Plain Text Edit
發(fā)送窗口,IP 地址窗口,端口號窗口:Line Edit
打開服務(wù)器,關(guān)閉服務(wù)器:Push Button
拖拽完成后逐個布局,根據(jù)需要設(shè)置組件大小,這里端口號框設(shè)置成了最小 200


按鈕布局:拖拽按鈕和彈簧,然后點(diǎn)擊水平布局。

然后選中全部組件,點(diǎn)擊柵格布局:

最后更改組件名稱注釋,完成后如圖 :

步驟三:服務(wù)器端編程:
1.創(chuàng)建 QTcpServer 對象
2.創(chuàng)建監(jiān)聽端口,使得客戶端可以使用這個端口訪問服務(wù)器,使用 listen 函數(shù)。
bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);
第一個參數(shù)是綁定指定的地址(即本機(jī)服務(wù)器 IP),第二個參數(shù)是綁定的本服務(wù)器端口號。
監(jiān)聽某個端口時,如果有新連接進(jìn)來就發(fā)出 newConnection()信號。
3.當(dāng)服務(wù)器對象被訪問時,會發(fā)出 newConnection()信號,所以為該信號添加槽函數(shù)并用一個 QTcpSocket對象接受客戶端的訪問。
4.當(dāng)socket接受緩沖區(qū)有新數(shù)據(jù)到來時,會發(fā)出readyRead()信號,為該信號添加槽函數(shù),使用readyRead()讀取。
5.socket 發(fā)送數(shù)據(jù)可直接調(diào)用 write()成員函數(shù)。
6.關(guān)閉端口號。
代碼如下:

#include
#include
#include
namespace Ui {
class TcpServer;
}
class TcpServer : public QMainWindow
{
Q_OBJECT
public:

explicit TcpServer(QWidget *parent = 0); ~TcpServer();
QTcpServer * tcpServer;
QTcpSocket * tcpSocket;
public slots:
void newConnection_Slot(void);
void readyRead_Solt(void);
private slots:
void on_openBu_clicked();
void on_sendBu_clicked();
void on_closeBu_clicked();
private:
Ui::TcpServer *ui;
};


#include "tcpserver.h" #include "ui_tcpserver.h" #include
#include
#include
TcpServer::TcpServer(QWidget *parent) :
QMainWindow(parent), ui(new Ui::TcpServer)
{
ui->setupUi(this);
tcpServer = new QTcpServer(this);
tcpSocket = new QTcpSocket(this);
//連接信號與槽函數(shù)進(jìn)行綁定
connect(tcpServer,SIGNAL(newConnection()),SLOT(newConnection_Slot()));
}
//連接信號槽函數(shù)

void TcpServer::newConnection_Slot(void)
{
//連接客戶端后 socket
tcpSocket = tcpServer->nextPendingConnection();
//套接字的接收數(shù)據(jù)信號與都數(shù)據(jù)槽函數(shù)連接
connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readyRead_Solt()));
}
//讀取數(shù)據(jù)
void TcpServer::readyRead_Solt(void)
{
QString buf;
//讀取
buf = tcpSocket->readAll();
ui->recvEdit->appendPlainText(buf);
}
TcpServer::~TcpServer()
{
delete ui;
}
//打開
void TcpServer:n_openBu_clicked()
{
//監(jiān)聽
tcpServer->listen(QHostAddress::Any,ui->portEdit->text().toUInt());
}
//發(fā)送數(shù)據(jù)
void TcpServer:n_sendBu_clicked()
{
tcpSocket->write(ui->sendEdit->text().toLocal8Bit().data());
}
//關(guān)閉
void TcpServer:n_closeBu_clicked()

{
tcpSocket->close();
}
步驟四:客戶端編程


1.創(chuàng)建 QTcpSocket 套接字對象
2.使用套接字對象的成員函數(shù)去請求連接服務(wù)器。
void connectToHost(const QHostAddress &address, quint16 port, openMode mode = ReadWrite);
第一個參數(shù)為服務(wù)器 IP 地址,第二個參數(shù)為服務(wù)器端口號。第三個參數(shù)為打開方式,默認(rèn)為可讀可寫
函數(shù)功能:請求連接服務(wù)器連接成功后發(fā)出connected()信號,綁定槽函數(shù)connected_Solt()去操作socket。
3.使用 write 函數(shù)向服務(wù)器發(fā)送數(shù)據(jù),當(dāng) socket 接收緩沖區(qū)有新數(shù)據(jù)到來時
會發(fā)出 readyRead()信號,為該信號添加槽函數(shù)以讀取數(shù)據(jù)。
4.斷開與服務(wù)器的連接。

class TcpClient : public QMainWindow
{
....... private slots:
void on_openBt_clicked();
void connected_Solt(void);
void readyRead_Solt(void);
void on_sendEdit_2_clicked();
void on_closeBt_clicked();
};

TcpClient::TcpClient(QWidget *parent) :
QMainWindow(parent), ui(new Ui::TcpClient)
{
ui->setupUi(this);
//創(chuàng)建 socket 對象
tcpSocket = new QTcpSocket(this);
}
TcpClient::~TcpClient()
{
delete ui;
}
//打開(連接服務(wù)器)
void TcpClient:n_openBt_clicked()
{
tcpSocket->connectToHost(ui->ipEdit->text(),ui->portEdit->text().toUInt());
connect(tcpSocket,SIGNAL(connected()),this,SLOT(connected_Solt()));
}
//等待數(shù)據(jù)到來
void TcpClient::connected_Solt(void)
{
connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readyRead_Solt()));
}
//讀取數(shù)據(jù)
void TcpClient::readyRead_Solt(void)
{
ui->recvEdit->appendPlainText(tcpSocket->readAll());
}
//發(fā)送
void TcpClient:n_sendEdit_2_clicked()
{
tcpSocket->write(ui->sendEdit->text().toLocal8Bit().data());
}
//關(guān)閉
void TcpClient:n_closeBt_clicked()

{
tcpSocket->close();
}
編譯運(yùn)行成功,使用服務(wù)器和客戶端通信如圖:




本文地址:http://m.qingdxww.cn/thread-765856-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 利用SAM E54 Xplained Pro評估工具包演示CAN轉(zhuǎn)USB橋接器以及基于CAN的主機(jī)和自舉程序應(yīng)用程序
  • 使用SAM-IoT Wx v2開發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開發(fā)培訓(xùn)教程
  • 集成高級模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区三区四区视频 | 久草资源网站 | 自拍偷拍亚洲第一页 | 麻豆制片厂制作传媒在现观看 | 国产高清91| 日韩亚洲欧洲在线rrrr片 | 200款禁用软件免费下载安卓 | 日韩在线视频免费播放 | 91成人午夜在线精品 | 手机看片国产免费 | 青青草成人在线观看 | www.四虎影院在线观看 | 日韩免费不卡视频 | 国产91av视频 | 免费不卡毛片 | 久久99国产精品二区不卡 | 国产又爽又黄又刺激的软件 | 日本高清在线播放一区二区三区 | 四虎网站在线 | 国产三级在线看 | 亚洲影视在线 | 免费精品一区二区三区在线观看 | 青青青国产免费手机视频在线观看 | 国产精品久久久久久久久久免费 | 国产色婷婷精品综合在线观看 | 狠狠色丁香婷婷综合久久来 | 日韩欧美亚洲国产一区二区三区 | 国产欧美综合精品一区二区 | 亚洲另类中文字幕 | 在线免费自拍 | 亚洲一卡2卡3卡4卡5卡乱码 | 九九热视频免费在线观看 | 久久精品一区二区国产 | www.99色.com| 日韩av成人 | 久久观看午夜精品 | 午夜精品久久久久久久四虎 | 一区二区三区 日韩 | 小黄鸭视频网站 | 免费羞羞网站视频 | 青青青在线观看视频免费播放 |