QTcpServer - Android上不支持的套接字操作

时间:2014-08-25 12:43:12

标签: android c++ qt

我正在尝试使用带有Qt 5.3.1的QTcpServer在Android上启动服务器,但服务器无法启动,我得到“不支持的套接字操作”。它在Windows上运行良好。

以下代码:

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()在Android上运行时返回“不支持的套接字操作

这不是Qt Android支持的,还是我做错了什么?

THX

1 个答案:

答案 0 :(得分:1)

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 "然后使用IP地址为 192.168.1.3 的PC,你执行 telnet 192.168.1.2 9878 它将无法连接!

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

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

瞧!这也有效!服务器启动,我可以从设备外部连接!例如,如果我在Android上启动服务器时从我的PC执行 telnet 192.168.1.2 9878 ,它会连接!所以我现在要做的就是将硬编码的IP地址替换为设备的实际IP地址!我认为QNetworkInterface :: allInterfaces()或其他类似的东西可以让我获得默认的IP地址。

所以只需使用网卡的实际IP地址而不是localhost或127.0.0.1,所有都应该是Ok。一切正常。