用qt写一段socket代理层的代码实现两个上位机同时连接两个下位机,并将两个下位机的数据呈现在上位机上
时间: 2024-03-11 11:47:13 浏览: 50
用QT制作一个TCPServer的上位机与TCPClient的下位机通信
好的,下面是一个简单的示例代码,实现了一个基于 Qt 的 Socket 代理层,可以同时连接两个下位机,并将它们的数据呈现在两个上位机上。
```cpp
#include <QtNetwork>
class SocketProxy : public QObject
{
Q_OBJECT
public:
SocketProxy(QObject *parent = nullptr)
: QObject(parent)
, m_socket1(new QTcpSocket(this))
, m_socket2(new QTcpSocket(this))
{
connect(m_socket1, &QTcpSocket::connected, this, &SocketProxy::onConnected1);
connect(m_socket1, &QTcpSocket::readyRead, this, &SocketProxy::onReadyRead1);
connect(m_socket1, &QTcpSocket::disconnected, this, &SocketProxy::onDisconnected1);
connect(m_socket2, &QTcpSocket::connected, this, &SocketProxy::onConnected2);
connect(m_socket2, &QTcpSocket::readyRead, this, &SocketProxy::onReadyRead2);
connect(m_socket2, &QTcpSocket::disconnected, this, &SocketProxy::onDisconnected2);
m_socket1->connectToHost(QHostAddress::LocalHost, 1234);
m_socket2->connectToHost(QHostAddress::LocalHost, 5678);
}
private slots:
void onConnected1()
{
qDebug() << "Connected to socket1";
}
void onReadyRead1()
{
QByteArray data = m_socket1->readAll();
m_socket2->write(data);
qDebug() << "Data from socket1: " << data;
}
void onDisconnected1()
{
qDebug() << "Disconnected from socket1";
}
void onConnected2()
{
qDebug() << "Connected to socket2";
}
void onReadyRead2()
{
QByteArray data = m_socket2->readAll();
m_socket1->write(data);
qDebug() << "Data from socket2: " << data;
}
void onDisconnected2()
{
qDebug() << "Disconnected from socket2";
}
private:
QTcpSocket *m_socket1;
QTcpSocket *m_socket2;
};
```
在这个示例代码中,我们创建了一个 `SocketProxy` 类来处理 Socket 代理。它使用了两个 `QTcpSocket`,一个用于连接到第一个下位机,另一个用于连接到第二个下位机。当一个下位机发送数据时,我们会将数据转发到另一个下位机,并将数据呈现在两个上位机上。
然后,我们可以在两个上位机上打开两个 TCP 连接,分别连接到 1234 端口和 5678 端口,就可以同时连接两个下位机,并将它们的数据呈现在两个上位机上了。
希望这个示例代码能够帮助到你。如果你有任何问题,请随时问我。
阅读全文