Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.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++ 用Qt测试本地连接_C++_Qt_Qnetworkaccessmanager - Fatal编程技术网

C++ 用Qt测试本地连接

C++ 用Qt测试本地连接,c++,qt,qnetworkaccessmanager,C++,Qt,Qnetworkaccessmanager,是否有方法使用Qt检查电缆是否未拔出 我知道我想联系的Ip地址,起初我想在这个Ip地址上做一个ping请求,但是对于这个简单的任务来说似乎太复杂了 所以我在想,也许在qnetworklibrary中有一个简单的函数可以做到这一点 我在互联网上搜索,但所有的解决方案都没有测试一个特定的IP 感谢您的帮助。尝试打开预定义端口上指定IP地址的套接字: QTcpSocket tester; tester.connectToHost(address, port); if(tester.waitForC

是否有方法使用Qt检查电缆是否未拔出

我知道我想联系的
Ip地址
,起初我想在这个
Ip地址
上做一个
ping请求
,但是对于这个简单的任务来说似乎太复杂了

所以我在想,也许在
qnetworklibrary
中有一个简单的函数可以做到这一点

我在互联网上搜索,但所有的解决方案都没有测试一个特定的IP


感谢您的帮助。

尝试打开预定义端口上指定IP地址的套接字:

QTcpSocket tester;

tester.connectToHost(address, port);

if(tester.waitForConnected(3000)) {
    //Remote host is online
} else {
    //Remote host is offline
}
有没有办法用Qt检查电缆是否未拔出

您可以使用
QNetworkSession
为指定接口实现这一点:

QNetworkConfigurationManager nwManager (this);
for (;;QThread::sleep (1) ) {
    bool isConfigurationFound {false};
    for (auto & configuration : nwManager.allConfigurations (/*QNetworkConfiguration::Active*/) ) {
        // Name depends on the environment: "Wired connection 1", "McDonaldsFreeWiFi", "Home", "eth0", "eth1", etc...
        if (isConfigurationFound = (configuration.name () == "eth0") ) {
            QNetworkSession session (configuration, this);
            session.open ();
            session.waitForOpened (/*timeout*/);

            qDebug () << "Session info:";
            qDebug () << "- usage: " << (session.isOpen () ? "Opened" : "Closed");
            qDebug () << "- state: " << (session.state  () == QNetworkSession::Connected ? "Connected" : "Not connected");

            break;
        }
    }
    qDebug () << (isConfigurationFound ? "" : "Configuration not found.");
}
如果您拔下电缆,您会得到:

"Session info:" 
"- usage: Opened;" 
"- state: Connected;" 
"Session info:" 
"- usage: Closed" 
"- state: Not connected"
以下是完整示例(也可从以下网址获得):

CMakeLists.txt

cmake_minimum_required (VERSION 2.8.8)
project (NaQt)
find_package (Qt5Network)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set (NaQt_SOURCES ${PROJECT_SOURCE_DIR}/main.cpp)
set (NaQt_HEADERS ${PROJECT_SOURCE_DIR}/NetworkAnalyzer.h)
qt5_wrap_cpp (NaQt_HEADERS_MOC ${NaQt_HEADERS})

add_executable (
    naqt
    ${NaQt_SOURCES}
    ${NaQt_HEADERS_MOC}
)
target_link_libraries (
    naqt
    Qt5::Core
    Qt5::Network
)
main.cpp

#include <QtCore>
#include "NetworkAnalyzer.h"

int main (int argc, char * argv [])
{
    QCoreApplication application (argc, argv);
    NetworkAnalyzer networkAnalyzer (& application);
    return application.exec ();
}

使用QT的QNetworkAccessManager类,该类提供networkAccessibleChanged信号 并将插槽连接到它

connect(&networkAccessManager, SIGNAL(networkAccessibleChanged(QNetworkAccessManager::NetworkAccessibility)), this, SLOT(onNetworkAccessibilityChanged(QNetworkAccessManager::NetworkAccessibility)));

它会发出信号,告诉我何时拔下以太网电缆

我如何才能等待连接,而不冻结整个程序?设置一个计时器并等待来自QTcpSocket的已连接()信号。对我来说,它仍然在阻塞,你能提供一个例子吗?@EvansBelloeil你可以尝试QtConcurrent::Run来满足这一需求这项工作,但是我的计算机上有两个以太网卡,我想知道哪一个没有连接,有没有办法从会话或类似的东西获取Ip地址?
但是我的计算机上有两个以太网卡,我想知道哪一个没有连接
-为此,测试“eth0”和“eth1”接口的连接
有没有办法从会话或类似的东西中获取Ip地址?
-我对这个问题也很感兴趣,不幸的是,我还没有找到任何解决方案。
connect(&networkAccessManager, SIGNAL(networkAccessibleChanged(QNetworkAccessManager::NetworkAccessibility)), this, SLOT(onNetworkAccessibilityChanged(QNetworkAccessManager::NetworkAccessibility)));