I/flutter(20418):错误:SocketException:没有到主机的路由(操作系统错误:没有到主机的路由,errno = 113),地址= 10.2.19.104,端口= 33064

问题描述 投票:0回答:1

我正在尝试让我在 Android Studio 中开发的 android flutter 应用程序连接到 Linux 服务器。使用 Android 模拟器可以正常连接,但在我的物理设备上测试时却无法连接。


Socket? _socket;

  Future<void> connect({
    required String ip,
    required int port,
  }) async {

    try {
      _socket = await Socket.connect(ip, 3000);
      stream = _socket!.asBroadcastStream();
    } on Exception catch(e){
      print("Error: $e");
    }

    print(ip);
    print(port);
    //
  }

使用物理设备进行测试时,除了不同的端口地址之外,它总是会产生以下错误:

I/flutter (20418): Error: SocketException: No route to host (OS Error: No route to host, errno = 113), address = 10.2.19.104, port = 33064

我尝试过各种物理手机。只有一个有效。其他人给出相同的错误消息。更改网络设置似乎没有任何效果。

android flutter dart socket.io port
1个回答
0
投票

这不是 Flutter 错误,这是一个错误,因为错误来自操作系统。基本上,发生的情况是,当操作系统向网络请求 IP 时,没有人响应,这就是为什么它告诉您它找不到主机来路由 IP。下载像 pingtool for android 这样的应用程序并尝试以这种方式 ping,很可能会超时。

  • 检查IP是否正确。

尝试这两件事,第一个是连接到端口 80 上的 Google IP,发送 'html1.1 ',如果您的路由器有网络界面,还可以尝试连接到路由器。在日志中,您应该看到类似以下内容:

在 1,537 毫秒内重新启动应用程序。 我/颤振(8643):142.250.64.206 我/颤振(8643):80 我/颤振(8643):HTTP/1.0 400错误请求...

如果手机有互联网,这应该可以。

import 'dart:io';

import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    Socket? socket;

    Future<void> connect({
      required String ip,
      required int port,
    }) async {
      try {
        Socket.connect(ip, port).then((Socket sock) {
          socket = sock;
          socket!.write('html1.1\r\n\r\n');
          socket!.listen((data) {
            print(String.fromCharCodes(data).trim());
          });
        });
      } on Exception catch (e) {
        print("Error: $e");
      }

      print(ip);
      print(port);
      //
    }

    return MaterialApp(
      title: 'Material App',
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Material App Bar'),
        ),
        body: Center(
          child: Column(
            children: [
              TextButton(
                onPressed: () {
                  connect(ip: '142.250.64.206', port: 80);
                },
                child: const Text('Connect http gogole.com'),
              ),
              TextButton(
                onPressed: () {
                  connect(ip: '10.2.19.1', port: 80);
                },
                child: const Text('Connect http router'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.