checkConnectServerAddress method

Future<String> checkConnectServerAddress(
  1. int serverPort, {
  2. ValueChanged<Socket>? conectSuccess,
  3. HostHandle? hostHandle,
  4. Duration? timeOut,
  5. 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);
                  return host;
                } catch (e) {
                  return '';
                }
              }
              return "";
            });
          }
        });
      }
      List<String> results = await Future.wait<String>(futureList);
      return results.firstWhere((e) => e.isNotEmpty, orElse: () => '');
    }
  }catch(e,s){
    throw ConnectException("连接IDEA-Dio Request模块失败:\n$e\n$s");
  }

}