Flutter使用mqtt5_client连接MQTT报错:SocketException主机查找失败
Flutter中mqtt5_client连接失败问题求助
在Flutter项目中使用mqtt5_client库时,安卓物理设备运行出现以下错误:Exception: SocketException: Failed host lookup: 'tcp://*******:1883' (OS Error: No address associated with hostname, errno = 7)
但在Android Studio中使用Kotlin结合paho库,能够正常建立MQTT连接并发布数据。已在清单文件中添加INTERNET等权限,且从mqtt_client切换到mqtt5_client后问题仍存在,附上相关代码与权限配置,希望得到解决思路。
使用的代码
import 'package:logger/logger.dart'; import 'package:mqtt5_client/mqtt5_client.dart'; import 'package:mqtt5_client/mqtt5_server_client.dart'; class MQTTClientService { late MqttServerClient _client; var logger = Logger(); MQTTClientService(String brokerURL, String clientId, int port) { _client = MqttServerClient(brokerURL, clientId); _client.port = port; _client.logging(on: true); _client.onConnected = _onConnected; _client.onDisconnected = _onDisconnected; _client.onUnsubscribed = _onUnsubscribed; _client.onSubscribed = _onSubscribed; _client.onSubscribeFail = _onSubscribeFail; _client.pongCallback = _pong; _client.keepAlivePeriod = 60; } Future<void> establishConnection() async { final connectMessage = MqttConnectMessage().startClean().withWillQos(MqttQos.atLeastOnce); logger.i('MQTT_LOGS::Mosquitto client connecting....'); _client.connectionMessage = connectMessage; try { await _client.connect(); } catch (e) { logger.e('Exception: $e'); _client.disconnect(); } if (_client.connectionStatus!.state == MqttConnectionState.connected) { logger.i('MQTT_LOGS::Mosquitto client connected'); } else { logger.i( 'MQTT_LOGS::ERROR Mosquitto client connection failed - disconnecting, status is ${_client.connectionStatus}'); _client.disconnect(); } } void subscribeToTopic(String topic) { // code to subscribe } void publishMessage(String topic, String message) { // code to publish } void terminateClientConnection() { _client.disconnect(); } void _onConnected() { logger.i('MQTT_LOGS:: Connected'); } void _onDisconnected() { logger.i('MQTT_LOGS:: Disconnected'); } void _onSubscribed(MqttSubscription subscription) { logger.i('MQTT_LOGS:: Subscribed topic: ${subscription.topic}'); } void _onSubscribeFail(MqttSubscription subscription) { logger.i('MQTT_LOGS:: Failed to subscribe ${subscription.topic}'); } void _onUnsubscribed(MqttSubscription? subscription) { if (subscription != null) { logger.i('MQTT_LOGS:: Unsubscribed topic: ${subscription.topic}'); } } void _pong() { logger.i('MQTT_LOGS:: Ping response client callback invoked'); } }
当前配置的权限
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
内容的提问来源于stack exchange,提问作者SINGHAJS
相关产品推荐
相关产品推荐

