Flutter如何连接WiFi内设备
在Flutter中如何连接局域网内的WiFi设备?我需要在同一个WiFi网络下与其他设备通信,比如智能家居设备或打印机。目前试过使用socket和http请求,但不太稳定。有没有推荐的插件或更稳定的实现方案?最好能支持设备发现和自动连接功能。谢谢!
2 回复
在Flutter中连接WiFi内设备,可以通过网络请求或Socket通信实现。使用http或dio库发起HTTP请求,或通过dart:io的Socket类建立TCP连接。确保设备在同一局域网,并使用设备的IP地址和端口号进行通信。
更多关于Flutter如何连接WiFi内设备的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中连接WiFi内设备(如局域网设备)通常通过Socket或HTTP请求实现。以下是具体方法:
1. 使用HTTP请求(REST API)
如果设备提供HTTP接口:
import 'package:http/http.dart' as http;
Future<void> connectToDevice() async {
try {
final response = await http.get(Uri.parse('http://192.168.1.100:8080/api'));
if (response.statusCode == 200) {
print('连接成功: ${response.body}');
}
} catch (e) {
print('连接失败: $e');
}
}
2. 使用Socket(TCP/UDP)
适用于自定义协议的设备:
import 'dart:io';
Future<void> connectViaSocket() async {
try {
final socket = await Socket.connect('192.168.1.100', 8080);
socket.write('Hello');
socket.listen((data) {
print('收到: ${String.fromCharCodes(data)}');
});
} catch (e) {
print('Socket错误: $e');
}
}
3. 网络发现(可选)
使用mDNS发现局域网设备:
# pubspec.yaml 添加依赖
dependencies:
multicast_dns: ^0.3.2
import 'package:multicast_dns/multicast_dns.dart';
Future<void> discoverDevices() async {
const String service = '_http._tcp';
final MDnsClient client = MDnsClient();
await client.start();
await for (PtrResourceRecord ptr in client
.lookup<PtrResourceRecord>(ResourceRecordQuery.serverPointer(service))) {
print('发现设备: ${ptr.domain}');
}
client.stop();
}
注意事项:
- 权限配置(Android):
<!-- android/app/src/main/AndroidManifest.xml -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
- 确保设备与手机在同一WiFi网络
- 使用真实设备IP地址(非localhost)
- 处理异常和超时情况
选择哪种方式取决于目标设备的通信协议。建议先通过ping或浏览器测试设备可达性。

