跨平台的Qt5获取打开TCP端口的方法

6
有没有一种平台无关的方法在Qt中获取未使用的TCP端口?我的需求是启动一个现有的应用程序,必须给它一个开放的TCP端口才能让它工作。
2个回答

7

使用QTcpServer是更简单的方法。

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

如果port为0,则会自动选择一个端口,然后您可以使用quint16 QTcpServer::serverPort() const获取“空闲”端口

然后关闭您的Tcp服务器

或者

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

  1. 如果连接成功,则您的端口为QTcpSocket::localPort()并关闭此TCP套接字
  2. 如果未连接,则您的端口为随机端口;

0

你是指一种tcp服务器吗?那么可以使用QTcpServer类。

如果你想启动一个已存在的服务器,那么你需要使用QProcess类。例如:

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。我需要启动的现有应用程序本质上是它自己的TCP服务器。但是为了启动它,我需要传递一个命令行选项,指定该应用程序绑定的TCP端口。 - Paul Grinberg
啊,我明白了。那么你需要使用 QProcess 类。 - Evgeny
我觉得你误解了我的问题。我知道如何在Qt中启动一个进程。我的问题是如何找到“1234”部分?这必须是一种平台无关的方法来获取未使用的TCP端口。 - Paul Grinberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接