gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:34 26 4
gpt4 key购买 nike

我正在尝试使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com