gpt4 book ai didi

c++ - Qtcpserver 仅在调试器下对监听函数返回未知错误

转载 作者:行者123 更新时间:2023-11-30 05:05:00 26 4
gpt4 key购买 nike

当我尝试使用QTcpServer 监听任何端口,并在调试器 下运行应用程序时,我总是会收到“未知错误”。当我在没有调试器的情况下运行这个程序时——一切似乎都很好

#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;
}

后来,我找到了this错误报告,但它已关闭,并且此行也不起作用:

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 Creator、重新启动计算机、更改端口和地址、搜索可能的开放端口...没有任何帮助。

附言

Qt 创作者 4.0.2Qt 5.7.0(MSVC 2013,32 位)修订版 47b4f2c738

最佳答案

我在 Visual Studio 2017 下调试 CMake 项目时看到了这个问题。我使用以下几行来调试问题:

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))

错误 值为10106 (WSAEPROVIDERFAILEDINIT)。我找到了 this回答指出未设置 SystemRoot 环境变量。

确实,出于某种原因,在 Visual Studio 2017 中调试 CMake 项目时,没有任何环境变量被传递给程序。所以 SystemRoot 环境变量是空的。我在 launch.vs.json 文件中定义了可用的环境,问题就解决了。

示例 launch.vs.json 文件:

{
"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"
}
]
}

关于c++ - Qtcpserver 仅在调试器下对监听函数返回未知错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48597996/

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