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

4412開發板Qt網絡編程-TCP實現服務器和客戶端

發布時間:2021-4-28 14:53    發布者:落風
網絡編程有 TCP 和 UDP,TCP 編程需要用到倆個類:QTcpServer 和 QTcpSocket。

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


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

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


步驟二:設計 ui 界面,
1. 在屬性編輯欄設置主窗口大。


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


按鈕布局:拖拽按鈕和彈簧,然后點擊水平布局。

然后選中全部組件,點擊柵格布局:

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

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

#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);
//連接信號與槽函數進行綁定
connect(tcpServer,SIGNAL(newConnection()),SLOT(newConnection_Slot()));
}
//連接信號槽函數

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

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


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

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);
//創建 socket 對象
tcpSocket = new QTcpSocket(this);
}
TcpClient::~TcpClient()
{
delete ui;
}
//打開(連接服務器)
void TcpClient:n_openBt_clicked()
{
tcpSocket->connectToHost(ui->ipEdit->text(),ui->portEdit->text().toUInt());
connect(tcpSocket,SIGNAL(connected()),this,SLOT(connected_Solt()));
}
//等待數據到來
void TcpClient::connected_Solt(void)
{
connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readyRead_Solt()));
}
//讀取數據
void TcpClient::readyRead_Solt(void)
{
ui->recvEdit->appendPlainText(tcpSocket->readAll());
}
//發送
void TcpClient:n_sendEdit_2_clicked()
{
tcpSocket->write(ui->sendEdit->text().toLocal8Bit().data());
}
//關閉
void TcpClient:n_closeBt_clicked()

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




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

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

廠商推薦

  • Microchip視頻專區
  • 利用SAM E54 Xplained Pro評估工具包演示CAN轉USB橋接器以及基于CAN的主機和自舉程序應用程序
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一区二区免费视频 | 一本大道香蕉高清久久 | 免费精品在线观看 | 国产精品精品 | 婷婷中文网 | 一级毛片一一级一级乇片 | 国产麻豆视频 | 一区二区三区视频在线播放 | 亚洲国产日韩无在线播放 | 操操操综合 | 久久综合九色综合精品 | 美女无遮挡免费视频 | 国产麻豆精品视频 | 日本视频在线观看免费 | 成年黄色网址 | 日韩二区| 国产精品麻豆一区二区三区 | 四虎影视成人 | 天天操夜夜拍 | 一级成人毛片 | h肉动漫在线视频无修无遮挡 | 亚洲毛片在线 | 久久久久久国产精品免费免 | 在线中文字幕亚洲 | 中文字幕avv| 欧美日本中文字幕 | 伊人婷婷色香五月综合缴激情 | 女人特黄大aaaaaa大片 | 三级国产精品一区二区 | 亚洲欧美日韩高清 | 国产高清晰在线播放 | 国产在线精品一区二区中文 | 亚洲人视频在线观看 | 香蕉精品高清在线观看视频 | 黑人又大又粗又爽免费视频 | dy天堂 | 国产 高清 在线 | 九九热精品在线观看 | 日本欧美一区二区三区视频 | 亚洲视频在线免费 | 国内精品麻豆 |