如何将Flutter应用连接到TCP套接字服务器?

9

我很难将Flutter应用程序连接到我的服务器上的网络TCP套接字。 我知道我必须使用某种中间选项,以在TCP套接字与Flutter之间进行数据传输。

有任何想法、信息可以帮助我实现这个过程吗?问题是如何将Flutter应用程序连接到TCP套接字服务器?


你看过这个插件吗?https://pub.dartlang.org/packages/flutter_socket_io - shadowsheep
这个插件支持HTTPS、SSL、TLC吗?我在他们的示例中没有看到任何相关内容,并且他们的文档中也没有提到安全性。 - Nick
不知道,实际上从未使用过,只是让你知道以防你错过了。从你的问题中并不清楚你已经尝试过什么和测试过哪些插件。 - shadowsheep
如果您只需要一个TCP套接字,请使用以下代码:Socket s = await Socket.connect(host, port); 如果需要SSL/TLS,请使用SecureSocket。如果需要HTTPS,请使用HttpClientpackage:http - Richard Heap
你有SecureSocket的例子吗?我正在AQUEDUCT控制器中使用此操作。我的问题是TCP套接字始终处于打开状态。这是旧系统,我无法获得足够的信息来了解套接字的构建方式。我将在您下面的答案中发布其他内容。 - Nick
1个回答

23

这是一个连接到服务器上的TCP套接字的最简单Dart程序。它发送“hello”,等待5秒钟任何回复,然后关闭套接字。您可以将其与自己的服务器或简单的回声服务器(如此处)一起使用。

import 'dart:io';
import 'dart:convert';
import 'dart:async';

main() async {
  Socket socket = await Socket.connect('192.168.1.99', 1024);
  print('connected');

  // listen to the received data event stream
  socket.listen((List<int> event) {
    print(utf8.decode(event));
  });

  // send hello
  socket.add(utf8.encode('hello'));

  // wait 5 seconds
  await Future.delayed(Duration(seconds: 5));

  // .. and close the socket
  socket.close();
}

1
谢谢Richard,我做了类似的事情。我可以在不到一秒钟的时间内连接到服务器并获取数据,我可以看到我获取到的大部分数据在55ms至375ms左右。因此,在Flutter移动应用程序中等待5秒钟会非常缓慢。 - Nick
我有7或8个查询,它们具有庞大的数据。您可以使用socket.listen 。在我的示例中,我在socket循环中使用for var data。在所有我的查询中,该循环仅运行一次。但是对于那些7或8个查询,我可以看到循环运行5或6次。我不知道我从服务器获取的数据的结束字符是什么。当我发送查询到服务器时,我使用\r\n作为最后一位。 - Nick
在\r\n服务器开始向我发送数据后,它在main() async {...}中运行得非常好,但是我在aqueduct Future<RequestOrResponse> handle(Request request) async {...}中遇到了一些问题。 - Nick
我正在使用Aqueduct作为Flutter移动应用程序和服务器上的TCP套接字之间通信的中间部分。您认为如果我切换到Server-Side Dart会怎样?移动应用程序使用https加密数据并将其发送到服务器。在服务器前端,我有一个nginx将数据发送回127.0.0.1:8888(即aqueduct)。在aqueduct中解密数据并更改数据格式,然后发送到服务器,然后aqueduct侦听服务器,当获取数据时进行格式化和加密,并发送回Flutter移动设备。如果我切换到Server-Side Dart,也许可以解决我的问题。有任何信息吗? - Nick
我只是举个例子,在关闭套接字之前等待5秒钟。这不会引入任何“缓慢”!为什么你不知道服务器的结束字符?问设计师或阅读规范。整个事情听起来非常复杂。你需要解释你的设计、实现,然后再解释你的问题。你最近的一系列问题没有得到高质量的答案,因为它们都不够清晰。 (问题在于,我认为你的设计不够清晰。不幸的是,SO不是一个好的设计问题论坛,因为它们往往违反了“意见”的规则。) - Richard Heap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接