[英]Dart Flutter Socket is it possible to receive a file over a socket?
Dart Flutter Socket is it possible to receive a file over a socket? Dart Flutter 套接字是否可以通过套接字接收文件? for example a picture jpeg例如图片 jpeg
code that accepts text接受文本的代码
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;
}
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));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.