checkConnectServerAddress method
Future<String>
checkConnectServerAddress(
- int serverPort, {
- ValueChanged<
Socket> ? conectSuccess, - HostHandle? hostHandle,
- Duration? timeOut,
- String? initHost,
获取服务器IP,也就是用户电脑的IP
Implementation
Future<String> checkConnectServerAddress(int serverPort,
{ValueChanged<Socket>? conectSuccess,
HostHandle? hostHandle,
Duration? timeOut,
String? initHost}) async {
try {
List<Future<String>> futureList = [];
if (initHost != null) {
var s = await Socket.connect(initHost, serverPort, timeout: timeOut);
conectSuccess?.call(s);
return initHost;
} else {
String? ip = await NetworkInfo().getWifiIP();
if (ip != null) {
final indexs = List.generate(256, (index) => index + 1);
await Future.forEach(indexs, (element) async {
var v = "";
if (v.isEmpty) {
v = await Future<String>.sync(() async {
final host = '${ip.substring(0, ip.lastIndexOf('.'))}.$element';
final isHandle = hostHandle?.call(host) ?? true;
if (isHandle) {
try {
var s = await Socket.connect(host, serverPort,
timeout: timeOut);
conectSuccess?.call(s);
s.listen((event) {}).onError((e) {
ddCheckPluginLog('onError:$e');
});
return host;
} catch (e) {
ddCheckPluginLog("socket-连接断开:$e");
return '';
}
}
return "";
});
}
});
}
List<String> results = await Future.wait<String>(futureList);
return results.firstWhere((e) => e.isNotEmpty, orElse: () => '');
}
} catch (e) {
throw const ConnectException("FlutterX: connection fail");
}
}