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

标签 android c++ qt

我正在尝试使用 QTcpServer 和 Qt 5.3.1 在 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() 返回“Unsupported Socket Operation when it runs on Android

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

谢谢

最佳答案

好的!我解决了。

问题出在这一行:

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

如果我将“localhost”替换为“127.0.0.1”,服务器可以正常启动,但“运行服务器的设备”之外的任何人都无法连接它。这意味着,假设您的网络正在使用 192.168.1.xx 并且您的 Android 设备具有以下 IP 地址:192.168.1.2。如果您在具有 IP 地址“192.168.1.2”的 Android 设备上使用“127.0.0.1”启动服务器,然后使用具有 IP 地址的 PC < strong>192.168.1.3你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 就可以了。现在一切正常。

关于android - QTcpServer - Android 上不支持的套接字操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25486235/

相关文章:

c++ - Windows 7下编译Qt3D

c++ - Qt XML 输入

android - 如何为Android 2.2 打包私有(private)媒体文件?

java - 在Android中处理大量的EditText数据

c++ - ifstream 在文件中有数据时读入空白

c++ - 使用其他编译器在 C++ 中清除屏幕

android - 我自己的应用程序之间的安全通信

安卓:扩展 RelativeLayout

c++ - 在 boost::asio 中自定义套接字/关闭系统调用

c++ - QQuickFramebufferObject重绘只显示清晰颜色