【问题标题】:Dart Flutter Socket is it possible to receive a file over a socket?Dart Flutter Socket 是否可以通过套接字接收文件?
【发布时间】:2021-01-06 11:03:37
【问题描述】:

Dart Flutter Socket 是否可以通过套接字接收文件? 例如图片jpeg

【问题讨论】:

  • 你的问题与flutter无关。您绝对可以通过套接字接收和发送文件。它只是一个协议。使用什么语言并不重要。
  • 我只是描述了我使用的东西,我找不到如何在 dart 上接受文件的示例
  • 这个问题很笼统。除非你有一些编程问题,否则这不是 StackOverflow 的合适问题。
  • 您需要向我们展示您编写的内容并尝试接受文件。有很多示例向您展示如何使用 websockets 发送和接收数据。甚至官方文档也有一个:flutter.dev/docs/cookbook/networking/web-sockets
  • 我的 windows10 64 程序打开一个 tcp 套接字服务器并从那里发送文本或文件 文本被正确接受 如何接受文件我不明白,我使用 Dart 2 天

标签: file flutter sockets dart


【解决方案1】:

接受文本的代码

Future<String> getListUsers(String request) async {
  if (request != null) {
    Socket socket;
    await Socket.connect(ip, port).then((Socket sock) {
      socket = sock;
    }).then((_) {
      socket.write('$request\r\n');
      return socket.first;
    }).then((data) {
      response = utf8.decode(data);
      socket.close();
    }).catchError((Object e) {
      response = 'error';
    });
  } else {
    response = 'error';
  }
  return response;
}

【讨论】:

    【解决方案2】:
    bad, but it works, maybe someone needs to receive a file via a TCP socket, the only thing you need to know is the file size
    
    Future<String> getImageFile(String request) async {
      Socket socket;
      final path = await _localPath;
      BytesBuilder builder = new BytesBuilder(copy: false);
    
      void doneHandlerDone(){
        socket.close();
      }
    
      void dataHandler(data){
        builder.add(data);
    
        if (builder.length >= 1716980) { // file size
          Uint8List dt = builder.takeBytes();
          final filename = 'test1.jpg';
    
          writeToFile(dt.buffer.asByteData(0, dt.buffer.lengthInBytes), '$path/$filename');
          doneHandlerDone();
        }
      }
    
      void errorHandler(error, StackTrace trace){
        print(error);
      }
    
      Socket.connect(ip, port).then((Socket sock) {
        socket = sock;
        socket.listen(dataHandler, onError: errorHandler, onDone: doneHandlerDone, cancelOnError: false);
      }).then((_) {
        socket.write('$request\r\n');
      }).catchError((Object e) {
        print("Unable to connect: $e");
      });
      return null;
    }
    
    Future<void> writeToFile(ByteData data, String path) {
      final buffer = data.buffer;
      return new File(path).writeAsBytes(buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 2022-01-18
      • 2013-12-15
      • 2015-01-02
      • 2012-03-06
      • 1970-01-01
      相关资源
      最近更新 更多