File 飞镖颤振插槽是否可以通过插槽接收文件?

File 飞镖颤振插槽是否可以通过插槽接收文件?,file,flutter,sockets,dart,File,Flutter,Sockets,Dart,飞镖颤振插槽是否可以通过插槽接收文件? 例如,接受文本的图片jpeg代码 Future<String> getListUsers(String request) async { if (request != null) { Socket socket; await Socket.connect(ip, port).then((Socket sock) { socket = sock; }).then((_) { socket.wri

飞镖颤振插槽是否可以通过插槽接收文件? 例如,接受文本的图片jpeg代码

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;
}
未来getListUsers(字符串请求)异步{
if(请求!=null){
插座;
等待套接字。连接(ip,端口)。然后((套接字套接字){
插座=插座;
}).然后(){
socket.write(“$request\r\n”);
首先返回插座;
}).然后((数据){
响应=utf8.解码(数据);
socket.close();
}).catchError((对象e){
响应='错误';
});
}否则{
响应='错误';
}
返回响应;
}
不好,但它可以工作,可能有人需要通过TCP套接字接收文件,您只需要知道文件大小
未来getImageFile(字符串请求)异步{
插座;
最终路径=等待_localPath;
BytesBuilder=新的BytesBuilder(副本:false);
void doneHandlerDone(){
socket.close();
}
无效数据处理程序(数据){
添加(数据);
如果(builder.length>=1716980){//文件大小
Uint8List dt=builder.takeBytes();
最终文件名='test1.jpg';
writeToFile(dt.buffer.asByteData(0,dt.buffer.lengthInBytes),“$path/$filename”);
doneHandlerDone();
}
}
无效错误处理程序(错误,堆栈跟踪){
打印(错误);
}
套接字。连接(ip,端口)。然后((套接字套接字){
插座=插座;
listen(dataHandler,onError:errorHandler,onDone:doneHandlerDone,cancelOnError:false);
}).然后(){
socket.write(“$request\r\n”);
}).catchError((对象e){
打印(“无法连接:$e”);
});
返回null;
}
未来写入文件(字节数据、字符串路径){
最终缓冲区=data.buffer;
返回新文件(path).writeAsubytes(buffer.asUint8List(data.offsetInBytes,data.lengthInBytes));
}

您的问题与颤振无关。您完全可以通过套接字接收和发送文件。这只是一个协议。不管你使用什么语言,我只是描述了我使用的语言,在任何地方我都找不到一个关于如何接受文件的例子。这个问题很一般。除非您有一些编程问题,否则这不是StackOverflow的适当问题。您需要向我们展示您编写的内容并尝试接受文件。有很多例子向您展示了如何使用WebSocket发送和接收数据。即使是官方文档也有一个:我的windows10 64程序打开一个tcp套接字服务器并从那里发送文本或文件文本被正确接受如何接受文件我不理解,我使用Dart 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));
}