Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qtcpserver仅在调试器下的侦听函数上返回未知错误_C++_Qt_Runtime Error_Qtcpserver - Fatal编程技术网

C++ Qtcpserver仅在调试器下的侦听函数上返回未知错误

C++ Qtcpserver仅在调试器下的侦听函数上返回未知错误,c++,qt,runtime-error,qtcpserver,C++,Qt,Runtime Error,Qtcpserver,当我尝试使用qtcserver在任何端口上侦听,并在调试器下运行app时,我总是得到“未知错误”。当我在没有调试器的情况下运行这个程序时,一切看起来都很好 #include <QCoreApplication> #include <QTcpServer> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QTcpServer

当我尝试使用
qtcserver
在任何端口上侦听,并在调试器下运行app时,我总是得到“未知错误”。当我在没有调试器的情况下运行这个程序时,一切看起来都很好

#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;
}
我已经尝试禁用windows防火墙,以管理员身份运行QT Creator,重新启动计算机,更改端口和地址,搜索可能打开的端口。。。没什么帮助

附言

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

为什么要使用HostAddress::AnyIPv4和HostAddress::AnyIPv6,然后使用all?可能只是使用所有QHostAddress::Any运行。

在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\u link\u库(${PROJECT\u NAME}PRIVATE ws2\u 32)

错误
值为
10106(WSAEProviderFailedIt)
。我发现答案是没有设置
SystemRoot
环境变量

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

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