独立于平台的 Qt5 获取开放 TCP 端口的方式

Platform independent Qt5 way to get open TCP port

Qt 中是否有独立于平台的方法来获取未使用的 TCP 端口?我需要启动一个现有的应用程序,必须为其提供一个开放的 TCP 端口才能工作。

你是指某种 tcp 服务器吗?然后就是QTcpServerclass.

如果要启动现有服务器,则需要 QProcess class。示例:

QString program = "path/to/server";
QStringList arguments;
arguments << "-p" << "1234"; //or what ever you want

QProcess *myProcess = new QProcess(parent);
myProcess->start(program, arguments);

使用 QTcpServer 更简单。

bool QTcpServer::listen(const QHostAddress & address = QHostAddress::Any, quint16 port = 0)

如果port为0,自动选择port,然后使用quint16 QTcpServer::serverPort() const获取"idle"端口

然后关闭你的 Tcp 服务器

生成一个随机端口,使用QTcpSocket连接它(本地连接)

  1. 如果已连接,您的端口是 QTcpSocket::localPort() 并关闭此 tcp 套接字
  2. 如果没有连接,你的端口是随机端口;