QTcpServer语言 - Android上不支持的Socket操作
QTcpServer - Unsupported Socket Operation on Android
我试图在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,一切都应该没问题。
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 重载操作程序时出错>>用于类中的字符串 memebr
- 对字符串进行位操作
- 我可以在 C++ 中的函数体之外进行操作吗?
- MPI突然停止了对多个核心的操作
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 对字符数组中的元素执行逐位操作
- 如何在directx/c++中进行平移/缩放操作
- 逐位操作的隐式类型转换
- 为什么一个向量上的多线程操作很慢
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 位移操作和位掩码未检测到重复字符
- 如何进行特定的位操作?
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 字符串操作 - 字符计数
- 此代码中的操作流程是什么?C/C++.
- 复制和交换习惯用法与移动操作之间的交互
- 像union_这样的 Boost.Geometry 操作如何处理浮点类型的基本不精确性?
- QTcpServer语言 - Android上不支持的Socket操作
- 如果 ssl::stream<tcp::socket 有挂起的操作,我是否不允许删除它>?