首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qtcpserver仅在调试器下才返回侦听函数上的未知错误。

Qtcpserver仅在调试器下才返回侦听函数上的未知错误。
EN

Stack Overflow用户
提问于 2018-02-03 13:41:47
回答 2查看 262关注 0票数 1

当我尝试使用QTcpServer监听任何端口,并在调试器下运行应用程序时,我总是会得到“未知错误”。当我在没有调试器的情况下运行这个程序时,看起来很不错。

代码语言:javascript
复制
#include <QCoreApplication>
#include <QTcpServer>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QTcpServer srv;
    bool r = srv.listen();
    qDebug() << srv.errorString();
    return r;
}

后来,我找到了 bug报告,但是它已经关闭了,而且这行也无法工作:

代码语言:javascript
复制
bool r = srv.listen(QHostAddress("127.0.0.1")); //ok
bool r = srv.listen(QHostAddress::AnyIPv4); //ok
bool r = srv.listen(QHostAddress::AnyIPv6);// ok
bool r = srv.listeb(QHostAddress::Any); //not ok

我尝试过禁用windows防火墙,运行QT作为管理员,重新启动计算机,更改端口和地址,搜索可能打开的端口.什么都帮不上忙。

附注:

Qt Creator 4.0.2 Qt 5.7.0 (MSVC,2013年,32位)修订版47b4f2c738

EN

回答 2

Stack Overflow用户

发布于 2019-03-10 16:03:25

在VisualStudio2017下调试CMake项目时,我看到了这个问题。我使用了以下行来调试这个问题:

代码语言:javascript
复制
WSAData wsadata;
int startupResult = WSAStartup(MAKEWORD(2, 0), &wsadata);
SOCKET socket = ::WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);
int error = WSAGetLastError();

(包括winsock2.h并将这一行添加到CMakeLists.txt:target_link_libraries(${PROJECT_NAME} PRIVATE ws2_32)中)

error值为10106 (WSAEPROVIDERFAILEDINIT)。我找到了答案,说明没有设置SystemRoot环境变量。

事实上,由于某种原因,在VisualStudio2017中调试CMake项目时,没有一个环境变量被传递给程序。因此,SystemRoot环境变量是空的。我在launch.vs.json文件中定义了可修改的环境,解决了这个问题。

示例launch.vs.json文件:

代码语言:javascript
复制
{
  "version": "0.2.1",
  "defaults": {},
  "configurations": [
    {
      "type": "default",
      "project": "CMakeLists.txt",
      "projectTarget": "SomeProject.exe",
      "name": "SomeProject.exe",
      "env": "PATH=${env.QT_DIR}\\bin;${env.QT_DIR}\\plugins\\platform;${env.PATH}\u0000TEMP=C:\\Users\\SomeUser\\AppData\\Local\\Temp\u0000SystemRoot=C:\\Windows"
    }
  ]
}
票数 1
EN

Stack Overflow用户

发布于 2018-02-03 16:58:30

为什么要使用HostAddress::AnyIPv4 4和HostAddress::AnyIPv4 6?也许只需运行所有QHostAddress::Any。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48597996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档