QT之不同主機之間TCP通訊
注意:伺服器端在監聽時,如果要接收其他主機的連線請求,需設定為
QHostAddress::Any
一、客戶端實現
1.tcpclient.h
#ifndef TCPCLIENT_H
#define TCPCLIENT_H
#include <QMainWindow>
#include <QtNetwork>
#include <QtNetwork/QTcpSocket>
namespace Ui {
class TcpClient;
}
class TcpClient : public QMainWindow
{
Q_OBJECT
public:
explicit TcpClient(QWidget *parent = 0);
~TcpClient();
protected:
void init();
void newTcpConnect(); //用於建立伺服器端與客戶端的連線函式
private:
Ui::TcpClient *ui;
QTcpSocket *tcpSocket;
private slots:
void receiveData(); //接收來自服務端的資料
void displayError(QAbstractSocket::SocketError);
};
#endif // TCPCLIENT_H
2.tcpclient.cpp
#include "tcpclient.h"
#include "ui_tcpclient.h"
#define ip "192.168.1.141"
#define port 8000
TcpClient::TcpClient(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::TcpClient)
{
ui->setupUi(this);
init();
}
TcpClient::~TcpClient()
{
delete ui;
}
void TcpClient::init()
{
tcpSocket=new QTcpSocket(this);
newTcpConnect();
connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(receiveData()));
connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),
this,SLOT(displayError(QAbstractSocket::SocketError)));
}
void TcpClient::receiveData()
{
QString datas=tcpSocket->readAll(); //接收字串資料
ui->receiveLineEdit->setText(datas); //顯示字串資料
}
void TcpClient::newTcpConnect()
{
tcpSocket->abort();
tcpSocket->connectToHost(ip,port);
}
void TcpClient::displayError(QAbstractSocket::SocketError)
{
qDebug()<<tcpSocket->errorString();
tcpSocket->close();
}
1.tcpserver.h
#ifndef TCPSERVER_H
#define TCPSERVER_H
#include <QMainWindow>
#include <QtNetwork>
#include <QtNetwork/QTcpSocket>
#include <QtNetwork/QTcpServer>
#include <QTimer>>
namespace Ui {
class TcpServer;
}
class TcpServer : public QMainWindow
{
Q_OBJECT
public:
explicit TcpServer(QWidget *parent = 0);
~TcpServer();
protected:
void init(); //初始化函式用於完成一些諸如訊號與槽之間的聯絡和變數初始化工作
private slots:
void on_sendButton_clicked();
void newListen(); //建立TCP監聽事件
void acceptConnection(); //接收客戶端連線
void displayError(QAbstractSocket::SocketError); //顯示錯誤資訊
private:
Ui::TcpServer *ui;
QTcpSocket *tcpSocket;
QTcpServer *tcpServer;
QTimer *timer;
};
#endif // TCPSERVER_H
2.tcpserver.cpp
#include "tcpserver.h"
#include "ui_tcpserver.h"
TcpServer::TcpServer(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::TcpServer)
{
ui->setupUi(this);
init();
}
TcpServer::~TcpServer()
{
delete ui;
}
void TcpServer::init()
{
timer=new QTimer;
this->tcpServer=new QTcpServer(this);
this->tcpSocket=new QTcpSocket(this);
newListen();
//當有客戶端連線請求時發出訊號,acceptConnection為訊號處理函式
connect(tcpServer,SIGNAL(newConnection()),this,SLOT(acceptConnection()));
//當tcpSocket在接受客戶端連線時出現錯誤,發出訊號並處裡
connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),
this,SLOT(displayError(QAbstractSocket::SocketError)));
}
void TcpServer::on_sendButton_clicked()
{
this->tcpSocket->write(ui->sendLineEdit->text().toLatin1());
}
void TcpServer::newListen()
{
if(!tcpServer->listen(QHostAddress::Any,8000))
{
qDebug()<<tcpServer->errorString();
close();
return;
}
}
void TcpServer::acceptConnection()
{
tcpSocket=tcpServer->nextPendingConnection();
}
void TcpServer::displayError(QAbstractSocket::SocketError)
{
qDebug()<<tcpSocket->errorString();
tcpSocket->close();
}
三、實現結果
相關文章
- Tcp, WebSocket 和 http 之間的通訊TCPWebHTTP
- Flink不同併發之間如何通訊
- 實現不同程式之間的通訊
- 虛擬主機和VPS主機之間的幾點不同
- 同網段不同網段主機間通訊原理
- python實現兩臺不同主機之間進行通訊(客戶端和服務端)——SocketPython客戶端服務端
- 探討一下flutter不同介面之間的通訊Flutter
- Android 程式之間通訊Android
- Kubernetes安裝之四:flanneld跨主機通訊
- React之元件(component)之間的通訊React元件
- TCP通訊之經典問題解決TCP
- linux 程式間通訊之管道Linux
- vue元件之間的通訊Vue元件
- linux 程式間通訊之FIFOLinux
- webRtc及元件之間通訊Web元件
- React - 元件之間的通訊React元件
- Linux程式之間如何通訊?Linux
- 元件之間的通訊LiveDataBus元件LiveData
- iOS app之間通訊方式iOSAPP
- 微服務之間通過RabbitMQ通訊微服務MQ
- Javascript與Python之間的程序間通訊JavaScriptPython
- Electron實戰之程式間通訊
- Flutter與android之間的通訊FlutterAndroid
- vue中兄弟之間元件通訊Vue元件
- VLAN之間單臂路由通訊路由
- Flink內部之間的通訊
- Flutter多Engine之間的通訊Flutter
- 在Go和Python之間通過ActiveMQ通訊GoPythonMQ
- Qt 程序間通訊,Qt子程序嵌入主程序QT
- 溫故之.NET程式間通訊——管道
- Java 和 Python 之間的 Socket 通訊JavaPython
- 程式間通訊之共享記憶體記憶體
- 多執行緒之間的通訊執行緒
- JUC之執行緒間的通訊執行緒
- React中元件之間通訊的方式React元件
- Linux 程式間通訊之System V 訊號量Linux
- 程式間通訊——XSI IPC之訊息佇列佇列
- Qt之訊號與槽QT
- JAVASE網路程式設計之TCP實現聊天通訊Java程式設計TCP