Dart/Flutter 套接字连接到随机端口

Dart/Flutter sockets connects on random port

现代编程变得越来越令人沮丧。尝试在 Flutter 上做一个简单的套接字测试应用程序(在 Android 上测试)。代码简单且不言自明:

 void Connect()
  {
    print("connecting...");
    Socket.connect("localhost", 80).then((Socket sock) {
      socket = sock;
      socket?.listen(dataHandler,
          onError: errorHandler,
          onDone: doneHandler,
          cancelOnError: false);
      socket?.write("GET / HTTP/1.1");
    }).catchError((Object e) {
      print("Unable to connect: $e");
    });
  }

代码抛出异常。输出:

I/flutter (15930): connecting...
I/flutter (15930): Unable to connect: SocketException: OS Error: Connection refused, errno = 111, address = localhost, port = 47244

端口总是不同的,为什么会出现这种情况?

错误信息中的端口号是本地端口,不是远程端口。这里有一个关于这个问题的问题:https://github.com/dart-lang/sdk/issues/12693

简而言之,使用 TCP 连接时,您需要两个端口。一个在您的设备上打开的本地端口和一个在您尝试调用的系统上打开的端口的远程端口。建立连接后,这两个端口号之间将进行通信。

因此该错误表明您在 localhost:80 上的服务器 运行 拒绝与您的应用程序建立连接。错误消息中的本地端口号通常可以忽略,因为它与调试大多数问题并不相关。