QTcpServer语言 - Android上不支持的Socket操作

QTcpServer - Unsupported Socket Operation on Android

本文关键字:Socket 操作 不支持 语言 Android QTcpServer      更新时间:2023-10-16

我试图在Android上使用QTcpServer与Qt 5.3.1启动服务器,但服务器不启动,我得到"不支持的套接字操作"。

下面的代码:

void StartListening()
{
   QHostAddress hostAddress;
   hostAddress.setAddress(QString("localhost"));
   hostAddress.toIPv4Address();
   quint16 portNumber = 9878;
   server->setMaxPendingConnections(1);
   server->setProxy(QNetworkProxy::NoProxy);
   if (server->listen(hostAddress, portNumber))
   {
       // Ok
   }
   else
   {
     Debug("Server did not start. " + server->errorString());
   }
}

server->errorString()返回不支持的套接字操作

是不支持Qt Android或我做错了什么?

Thx

OK!我算出来了。

问题出在这一行:

 hostAddress.setAddress(QString("localhost"));

如果我将"localhost"替换为"127.0.0.1",服务器启动正常,但没有人在"服务器运行的设备"之外可以连接到它。这意味着,假设您的网络正在使用192.168.1。xx,你的Android设备有以下IP地址:192.168.1.2。如果你用"127.0.0.1"在你的Android设备上启动服务器,它有一个IP地址:"192.168.1.2",然后使用你的PC与IP地址192.168.1.3你做telnet 192.168.1.2 9878它将无法连接!

所以我决定通过指定Android设备的IP地址启动服务器:192.168.1.2

 hostAddress.setAddress(QString("192.168.1.2"));

瞧!这也管用!服务器启动了,我可以从设备外部连接!例如,如果我做telnet 192.168.1.2 9878从我的PC,而服务器在Android上启动,它连接!所以我现在需要做的就是将硬编码的IP地址替换为设备的实际IP地址!我认为QNetworkInterface::allInterfaces()或类似的东西将使我能够获得默认IP地址。

因此,只需使用网卡的实际IP地址,而不是localhost或127.0.0.1,一切都应该没问题。