用qt将其改为可以在两台电脑上实现两台上位机控制一台下位机的功能
时间: 2024-03-17 07:40:00 浏览: 59
QT写的串口上位机,利用串口通讯来控制机器
好的,下面是修改后的代码,可以在两台电脑上实现两台上位机控制一台下位机的功能:
```cpp
#include <QTcpSocket>
#include <QTcpServer>
#include <QCoreApplication>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 创建代理服务器
QTcpServer proxyServer;
// 监听本机任意可用端口
proxyServer.listen(QHostAddress::Any, 0);
// 输出代理服务器的地址和端口号
qDebug() << "Proxy server address:" << proxyServer.serverAddress().toString();
qDebug() << "Proxy server port:" << proxyServer.serverPort();
// 连接下位机
QTcpSocket downSocket;
downSocket.connectToHost("169.254.7.71", 10001);
// 等待连接成功
if (!downSocket.waitForConnected()) {
qDebug() << "Failed to connect to the down computer!";
return 1;
}
// 等待两个上位机连接
int connectedCount = 0;
QTcpSocket *clientSocket1 = nullptr;
QTcpSocket *clientSocket2 = nullptr;
while (true) {
// 等待一个客户端连接
if (!proxyServer.waitForNewConnection()) {
qDebug() << "Failed to connect to a client!";
return 1;
}
// 接受连接
QTcpSocket *clientSocket = proxyServer.nextPendingConnection();
connectedCount++;
if (connectedCount == 1) {
// 第一个客户端连接
clientSocket1 = clientSocket;
} else {
// 第二个客户端连接
clientSocket2 = clientSocket;
// 将两个客户端和下位机连接
clientSocket1->setProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, argv[1], atoi(argv[2])));
clientSocket1->connectToHost("169.254.7.71", 10001);
clientSocket2->setProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, argv[1], atoi(argv[2])));
clientSocket2->connectToHost("169.254.7.71", 10001);
}
}
return a.exec();
}
```
该代码与之前的代码不同之处在于,它从命令行参数中获取代理服务器的地址和端口号,并在第二个客户端连接时,将两个客户端分别连接到下位机上。同时,修改了循环的终止条件,当两个客户端都成功连接到下位机时,程序才会退出循环。
因此,该代码需要在两台电脑上分别运行,并在命令行中指定代理服务器的地址和端口号。例如,在第一台电脑上运行以下命令:
```
./proxy_server 192.168.0.100 8888
```
在第二台电脑上运行以下命令:
```
./proxy_server 192.168.0.100 8888
```
其中,`192.168.0.100` 是代理服务器的 IP 地址,`8888` 是代理服务器的端口号。这样,第一台电脑和第二台电脑上的两个上位机就可以通过代理服务器连接到同一台下位机上。
阅读全文