C++ 用Qt测试本地连接
是否有方法使用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
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)));