用qt写一个socket代理代码实现两个上位机同时连接两个下位机,并将下位机的数据在两台上位机上呈现出来
时间: 2024-03-20 15:40:46 浏览: 16
以下是一个简单的Qt Socket代理实现代码示例,可以实现两个上位机同时连接两个下位机,并将下位机的数据在两台上位机上呈现出来。
```cpp
#include <QtNetwork>
#include <QtWidgets>
class SocketProxy : public QWidget
{
Q_OBJECT
public:
SocketProxy(QWidget *parent = nullptr)
: QWidget(parent)
{
// 初始化UI界面
m_btnStart = new QPushButton("Start");
m_btnStop = new QPushButton("Stop");
m_textEdit1 = new QTextEdit;
m_textEdit2 = new QTextEdit;
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(m_btnStart);
layout->addWidget(m_btnStop);
layout->addWidget(m_textEdit1);
layout->addWidget(m_textEdit2);
setLayout(layout);
// 初始化Socket连接
m_socket1 = new QTcpSocket(this);
m_socket2 = new QTcpSocket(this);
// 连接Socket的readyRead信号到槽函数
connect(m_socket1, &QTcpSocket::readyRead, this, &SocketProxy::onSocket1ReadyRead);
connect(m_socket2, &QTcpSocket::readyRead, this, &SocketProxy::onSocket2ReadyRead);
// 连接按钮的clicked信号到槽函数
connect(m_btnStart, &QPushButton::clicked, this, &SocketProxy::onStartClicked);
connect(m_btnStop, &QPushButton::clicked, this, &SocketProxy::onStopClicked);
// 初始化定时器
m_timer = new QTimer(this);
connect(m_timer, &QTimer::timeout, this, &SocketProxy::onTimerTimeout);
}
private slots:
void onStartClicked()
{
// 开始连接Socket
m_socket1->connectToHost("192.168.1.100", 1234);
m_socket2->connectToHost("192.168.1.101", 1234);
// 开始定时器
m_timer->start(1000);
// 更新按钮状态
m_btnStart->setEnabled(false);
m_btnStop->setEnabled(true);
}
void onStopClicked()
{
// 停止连接Socket
m_socket1->disconnectFromHost();
m_socket2->disconnectFromHost();
// 停止定时器
m_timer->stop();
// 更新按钮状态
m_btnStart->setEnabled(true);
m_btnStop->setEnabled(false);
}
void onSocket1ReadyRead()
{
// 读取Socket1的数据
QByteArray data = m_socket1->readAll();
// 将数据转发到Socket2
m_socket2->write(data);
// 在文本框中显示数据
m_textEdit1->append(QString(data));
}
void onSocket2ReadyRead()
{
// 读取Socket2的数据
QByteArray data = m_socket2->readAll();
// 将数据转发到Socket1
m_socket1->write(data);
// 在文本框中显示数据
m_textEdit2->append(QString(data));
}
void onTimerTimeout()
{
// 向Socket1和Socket2发送数据
m_socket1->write("Hello from Socket1!");
m_socket2->write("Hello from Socket2!");
}
private:
QPushButton *m_btnStart;
QPushButton *m_btnStop;
QTextEdit *m_textEdit1;
QTextEdit *m_textEdit2;
QTcpSocket *m_socket1;
QTcpSocket *m_socket2;
QTimer *m_timer;
};
```
在上述代码中,我们创建了一个SocketProxy类,继承自QWidget,实现了两个Socket的连接、数据转发、定时器发送数据和界面显示等功能。在使用时,只需要将SocketProxy作为主窗口类的子类,并在主窗口中显示即可。