我正在尝试使用带有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
答案 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。一切正常。