<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Qt TCP的使用者端與伺服器端的連線,供大家參考,具體內容如下
可以實現區域網內簡單的資訊傳遞(檔案傳輸,稍後更新)
介面是用ui設計師做的簡單設計
(1)、ClientWidget.h 標頭檔案
#ifndef CLIENTWIDGET_H #define CLIENTWIDGET_H #include <QWidget> #include "ui_ClientWidget.h" #include <QTcpSocket> #include <QHostAddress> #include <QTextCodec> class ClientWidget : public QWidget, public Ui::ClientWidget { Q_OBJECT public: ClientWidget(QWidget *parent = 0); ~ClientWidget(); private slots: //連線按鈕 void onConnectButtonClicked(); // void onTextEditRead(); //傳送按鈕 void onButtonSendClicked(); //獲取對方傳送的內容 void onRecesiveDataFromServer(); //斷開連線 void onDisConnect(); private: //Ui::ClientWidget ui; QTcpSocket *tcpSocket; }; #endif // CLIENTWIDGET_H
(2)、ClientWidget.cpp檔案
#include "stdafx.h" #include "ClientWidget.h" #include <QPushButton> ClientWidget::ClientWidget(QWidget *parent) : QWidget(parent) { setupUi(this); setWindowTitle(QString::fromWCharArray(L"使用者端")); tcpSocket = NULL; //分配空間,指定父物件 tcpSocket = new QTcpSocket(this); ButtonDisconnect->setEnabled(false); //tcpSocket->abort(); //傳送與伺服器連線訊號 connect(connectBtn, SIGNAL(clicked()), this, SLOT(onConnectButtonClicked())); //連線成功後接收到connected訊號 connect(tcpSocket, SIGNAL(connected()), this, SLOT(onTextEditRead())); //給伺服器傳送內容 connect(ButtonSend, SIGNAL(clicked()), this, SLOT(onButtonSendClicked())); //接收來自伺服器的內容,訊號readReady connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(onRecesiveDataFromServer())); connect(ButtonDisconnect, SIGNAL(clicked()), this, SLOT(onDisConnect())); } ClientWidget::~ClientWidget() { } void ClientWidget::onConnectButtonClicked() { //獲取伺服器IP和埠 QString ipStr = LineEditIPName->text(); qint16 portName = LineEditPortName->text().toInt(); QHostAddress ip = QHostAddress(ipStr); //主動和伺服器建立連線 tcpSocket->connectToHost(ip, portName); } void ClientWidget::onTextEditRead() { TextEditRead->setText(QString::fromLocal8Bit("成功和伺服器建立好連線!!!")); connectBtn->setEnabled(false); ButtonDisconnect->setEnabled(true); } void ClientWidget::onButtonSendClicked() { if (tcpSocket == NULL) { return; } //獲取編輯框內容 QString str = TextEditWrite->toPlainText(); //傳送文字內容 tcpSocket->write(str.toUtf8().data()); TextEditWrite->clear(); } void ClientWidget::onRecesiveDataFromServer() { QByteArray arrayAll = tcpSocket->readAll(); QTextCodec *tc = QTextCodec::codecForName("UTF-8"); QString str = tc->toUnicode(arrayAll); //追加到讀取編輯區中 TextEditRead->append(str); } void ClientWidget::onDisConnect() { if (tcpSocket == NULL) { return; } tcpSocket->disconnectFromHost(); tcpSocket->close(); connectBtn->setEnabled(true); ButtonDisconnect->setEnabled(false); TextEditRead->setText(QString::fromLocal8Bit("連線已斷開!!!")); }
(1)、ServerWidget.h檔案
#ifndef SERVERWIDGET_H #define SERVERWIDGET_H #include <QtGui/QWidget> #include "ui_ServerWidget.h" #include <QTcpServer> #include <QTcpSocket> #include <QString> #include <QTextCodec> class ServerWidget : public QWidget { Q_OBJECT public: ServerWidget(QWidget *parent = 0, Qt::WFlags flags = 0); ~ServerWidget(); QTcpServer *tcpServer; QTcpSocket *tcpSocket; private slots: void OnConnectTcpServer(); void OnSendButtonClicked(); void OnCloseButtonClicked(); void OnSeResiveData(); void OnDisconnected(); private: Ui::ServerWidgetClass ui; }; #endif // SERVERWIDGET_H
(2)、ServerWidget.cpp 檔案
#include "stdafx.h" #include "ServerWidget.h" ServerWidget::ServerWidget(QWidget *parent, Qt::WFlags flags) : QWidget(parent, flags) { ui.setupUi(this); tcpServer = NULL; tcpSocket = NULL; setWindowTitle(QString::fromWCharArray(L"伺服器(埠:8888)")); //箭筒通訊端,指定父物件,讓其自動回收空間 tcpServer = new QTcpServer(this); //監聽並繫結埠 tcpServer->listen(QHostAddress::Any, 8888); connect(tcpServer, SIGNAL(newConnection()), this, SLOT(OnConnectTcpServer())); connect(ui.sendButton, SIGNAL(clicked()), this, SLOT(OnSendButtonClicked())); connect(ui.closeButton, SIGNAL(clicked()), this, SLOT(OnCloseButtonClicked())); connect(tcpServer, SIGNAL(disconnected()), this, SLOT(OnDisconnected())); } ServerWidget::~ServerWidget() { } #include <QDebug> void ServerWidget::OnConnectTcpServer() { //取出建立好的通訊端 tcpSocket = tcpServer->nextPendingConnection(); //獲取對方的IP和埠號 QString ipStr = tcpSocket->peerAddress().toString(); qint16 portName = tcpSocket->peerPort(); QString connectStr = QString::fromLocal8Bit("成功連線"); QString tempStr = QString("[%1 : %2]:" + connectStr).arg(ipStr).arg(portName); ui.textRead->setText(tempStr); connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(OnSeResiveData())); } void ServerWidget::OnSendButtonClicked() { if (tcpSocket == NULL) { return; } //獲取編輯區的內容 QString str = ui.textWrite->toPlainText(); //給對方傳送資料。使用通訊端是tcpSocket tcpSocket->write(str.toUtf8().data()); ui.textWrite->clear(); } void ServerWidget::OnCloseButtonClicked() { if (tcpSocket == NULL) { return; } //主動和使用者端斷開連線 tcpSocket->disconnectFromHost(); ui.textRead->setText(QString::fromLocal8Bit("連線已斷開!!!")); tcpSocket = NULL; } void ServerWidget::OnSeResiveData() { //從通訊通訊端中取出內容 QByteArray dataAll = tcpSocket->readAll(); QTextCodec *tc = QTextCodec::codecForName("UTF-8"); QString str = tc->toUnicode(dataAll); ui.textRead->append(str); } void ServerWidget::OnDisconnected() { ui.textRead->setText(QString::fromLocal8Bit("連線已斷開!!!")); }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45