<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
TCP協定是經常使用的通訊方式。在QT中做了非常友好的封裝,使用非常方便。
需要新增的模組:network
Qt中的TCP類:QTcpSocket , QTcpServer
連線目標地址和埠
virtual void QTcpSocket ::connectToHost(const QHostAddress &address, quint16 port, OpenMode mode = ReadWrite);
inline qint64 QTcpSocket ::write(const QByteArray &data)
bool QTcpServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);
void QTcpServer::newConnection();
virtual bool QTcpServer::hasPendingConnections() const;
virtual QTcpSocket *QTcpServer::nextPendingConnection();
void QTcpSocket::readyRead();
QByteArray readAll();
使用者端
#include <QTcpSocket> #include <QWidget> #include <QLineEdit> class Client : public QWidget { Q_OBJECT public: Client(QWidget *parent); public slots: void slotSendButtonClick(); private: QTcpSocket *_socket; QLineEdit *_lineEdit; bool _isConnected; };
#include "client.h" #include <QPushButton> #include <QHBoxLayout> Client::Client(QWidget *parent) : QWidget(parent) { _socket = new QTcpSocket(this); _lineEdit = new QLineEdit(this); QPushButton *sendButton = new QPushButton("send"); connect(sendButton, SIGNAL(clicked()), this, SLOT(slotSendButtonClick())); connect(_lineEdit, SIGNAL(returnPressed()), this, SLOT(slotSendButtonClick())); QHBoxLayout *lay = new QHBoxLayout(this); lay->addWidget(_lineEdit); lay->addWidget(sendButton); _isConnected = false; } void Client::slotSendButtonClick() { if (!_isConnected) { _socket->connectToHost("127.0.0.1", 9988); _isConnected = true; } QString text = _lineEdit->text(); if (!text.isEmpty()) { _socket->write(text.toUtf8());//傳送資料 _lineEdit->clear(); } }
伺服器端
#include <QWidget> #include <QTcpServer> #include <QTcpSocket> class QTextBrowser; class Server :public QWidget { Q_OBJECT public: Server(QWidget *parent); public slots: void slotCurrentIndexChanged(const QString&); void slotNewConnection(); private: QTcpServer *_server; QTcpSocket *_socket; QTextBrowser *_textBrowser; };
#include "server.h" #include <QHostAddress> #include <QTextBrowser> #include <QByteArray> #include <QGridLayout> #include <QNetworkInterface> #include <QComboBox> Server::Server(QWidget *parent) { _server = new QTcpServer(this); //_server->listen(QHostAddress::Any, 9988);//監聽跟本主機相連的所有網口 connect(_server, SIGNAL(newConnection()),this, SLOT(slotNewConnection()) ); QList<QHostAddress> addrList = QNetworkInterface::allAddresses(); QComboBox *comboBox = new QComboBox; for (const QHostAddress& addr : addrList) { quint32 ipAddr = addr.toIPv4Address(); if (ipAddr != 0) { comboBox->addItem(QHostAddress(ipAddr).toString()); } } connect(comboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(slotCurrentIndexChanged(const QString&))); _textBrowser = new QTextBrowser(this); QGridLayout *lay = new QGridLayout(this); lay->addWidget(comboBox, 0, 0); lay->addWidget(_textBrowser,1,0); } void Server::slotCurrentIndexChanged(const QString& item) { if (!_server->isListening()) { _server->listen(QHostAddress(item), 9988); } _textBrowser->append("listen..."); } void Server::slotNewConnection() { _textBrowser->append("connecting..."); while (_server->hasPendingConnections())//必須處理完所有的連線,否則有新連線時就不會在發訊號過來 { _socket = _server->nextPendingConnection(); connect(_socket, &QTcpSocket::readyRead, [&]() { _textBrowser->append("receive message..."); QByteArray newMessage = _socket->readAll(); _textBrowser->append(QString(newMessage)); }); } }
使用效果
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援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