在以下的服务器/客户端套接字代码中,服务器尝试发送从0到1023的整数。客户端接收到了正确数量的整数,但它们在255处截断了。为什么会这样,有什么正确的方法吗?
此外,感觉 Socket api 与其他语言不同,更具有 Dart 特色,支持作为流进行读取。但是,如果您只想读取 N 个字节,该怎么做?我看到了 take 方法(Stream take(int count)),但我不清楚 count 到底取了多少个字节,特别是已经读取了多少个字节。因为 Socket 实现了 Stream< List < int > > ,而 int 并不是一个固定大小的实体(我认为是这样的?),你如何知道已经读取了多少个字节?
* 服务器 *
import 'dart:async';
import 'dart:io';
main() async {
final server = await ServerSocket.bind('127.0.0.1', 4041);
server.listen((Socket socket) {
print('Got connected ${socket.remoteAddress}');
for(int i=0; i<1024; i++) {
socket.add([i]);
}
socket.close();
print('Closed ${socket.remoteAddress}');
});
}
* 客户端 *
import 'dart:async';
import 'dart:io';
main() async {
final client = await Socket.connect('127.0.0.1', 4041);
client.listen(
(var data) => print('Got $data'),
onDone: () { print('Done'); client.close(); },
onError: (e) { print('Got error $e'); client.close(); });
print('main done');
}
此外,感觉 Socket api 与其他语言不同,更具有 Dart 特色,支持作为流进行读取。但是,如果您只想读取 N 个字节,该怎么做?我看到了 take 方法(Stream take(int count)),但我不清楚 count 到底取了多少个字节,特别是已经读取了多少个字节。因为 Socket 实现了 Stream< List < int > > ,而 int 并不是一个固定大小的实体(我认为是这样的?),你如何知道已经读取了多少个字节?