RawDatagramSocket抽象 接口

UDP套接字的非缓冲接口。

原始数据报套接字按照底层操作系统接收的数据块顺序,传递Stream中的RawSocketEvent

注意,不会收到RawSocketEvent.readClosed事件,因为UDP套接字不能由远程端关闭。

它与POSIX原始套接字不同。

import 'dart:io';
import 'dart:typed_data';

void main() async {
  // Read the current time from an NTP server.
  final serverAddress = (await InternetAddress.lookup('pool.ntp.org')).first;
  final clientSocket = await RawDatagramSocket.bind(
      serverAddress.type == InternetAddressType.IPv6
          ? InternetAddress.anyIPv6
          : InternetAddress.anyIPv4,
      0);
  final ntpQuery = Uint8List(48);
  ntpQuery[0] = 0x23; // See RFC 5905 7.3

  clientSocket.listen((event) {
    switch (event) {
      case RawSocketEvent.read:
        final datagram = clientSocket.receive();
        // Parse `datagram.data`
        clientSocket.close();
        break;
      case RawSocketEvent.write:
        if (clientSocket.send(ntpQuery, serverAddress, 123) > 0) {
          clientSocket.writeEventsEnabled = false;
        }
        break;
      case RawSocketEvent.closed:
        break;
      default:
        throw "Unexpected event $event";
    }
  });
}
继承

构造函数

RawDatagramSocket()

属性

address InternetAddress
此套接字使用的地址。
无设置器
broadcastEnabled bool
是否启用IPv4广播。
getter/setter 对
first Future<RawSocketEvent>
此流的第一元素。
无设置器继承
hashCode int
此对象的哈希码。
无设置器继承
isBroadcast bool
此流是否是广播流。
无设置器继承
isEmpty Future<bool>
此流是否包含任何元素。
无设置器继承
last Future<RawSocketEvent>
此流的最后一个元素。
无设置器继承
length Future<int>
此流中的元素数量。
无设置器继承
multicastHops int
从该套接字发送的多播包的最大网络跳数。
getter/setter 对
multicastInterface NetworkInterface?
用于 outgoing 多播包的网卡。
getter/setter 对
multicastLoopback bool
是否将多播流量回收到主机。
getter/setter 对
port int
此套接字使用的端口号。
无设置器
readEventsEnabled bool
是否应对RawDatagramSocket监听RawSocketEvent.read事件。
getter/setter 对
runtimeType Type
对象的运行时类型表示。
无设置器继承
single Future<RawSocketEvent>
此流的单个元素。
无设置器继承
writeEventsEnabled bool
是否应使 RawDatagramSocket 监听 RawSocketEvent.write 事件。
getter/setter 对

方法

any(bool test(RawSocketEvent element)) Future<bool>
检查 test 是否接受此流提供的任何元素。
继承
asBroadcastStream({void onListen(StreamSubscription<RawSocketEvent> subscription)?, void onCancel(StreamSubscription<RawSocketEvent> subscription)?}) Stream<RawSocketEvent>
返回一个多订阅流,它产生与这个相同的事件。
继承
asyncExpand<E>(Stream<E>? convert(RawSocketEvent event)) Stream<E>
将每个元素转换为异步事件的序列。
继承
asyncMap<E>(FutureOr<E> convert(RawSocketEvent event)) Stream<E>
创建一个新的流,其中每个数据事件异步映射到新的事件。
继承
cast<R>() Stream<R>
将此流适配为 Stream<R>
继承
close() → void
关闭数据报套接字。
contains(Object? needle) Future<bool>
返回是否在流的元素中包含 needle
继承
distinct([bool equals(RawSocketEvent previous, RawSocketEvent next)?]) Stream<RawSocketEvent>
跳过等于前一数据事件的任何数据事件。
继承
drainE>([E? futureValue]) FutureE>
丢弃此流上的所有数据,但在完成或出错时发出信号。
继承
elementAt(int index) FutureRawSocketEvent>
返回此流第 index 个数据事件的价值。
继承
every(bool test(RawSocketEvent element), {RawSocketEvent orElse()?}) Futurebool>
检查是否 test 接受此流提供的所有元素。
继承
expandS>(IterableS> convert(RawSocketEvent element)) StreamS>
将流中的每个元素转换为元素序列。
继承
firstWhere(bool test(RawSocketEvent element), {RawSocketEvent orElse()?}) FutureRawSocketEvent>
找到此流中匹配 test 的第一个元素。
继承
fold<S>(S initialValue, S combine(S previous, RawSocketEvent element)) Future<S>
通过重复应用combine来组合一系列值。
继承
forEach(void action(RawSocketEvent element)) Future<void>
在此流中的每个元素上执行action
继承
getRawOption(RawSocketOption option) Uint8List
读取关于RawSocket的低级信息。
handleError(Function onError, {bool test(dynamic error)?}) Stream<RawSocketEvent>
创建一个包装Stream来拦截该流的一些错误。
继承
join([String separator = ""]) Future<String>
将元素的字面表示组合成单个字符串。
继承
joinMulticast(InternetAddress group, [NetworkInterface? interface]) → void
加入一个多播组。
lastWhere(bool test(RawSocketEvent element), {RawSocketEvent orElse()?}) Future<RawSocketEvent>
查找符合test的最后一个元素。
继承
leaveMulticast(InternetAddress group, [NetworkInterface? interface]) → void
离开多播组。
listen(void onData(RawSocketEvent event)?, {Function? onError, void onDone()?, bool? cancelOnError}) StreamSubscription<RawSocketEvent>
向此流添加订阅。
继承
map<S>(S convert(RawSocketEvent event)) Stream<S>
将此流的每个元素转换为新的流事件。
继承
noSuchMethod(Invocation invocation) → dynamic
当访问不存在的方法或属性时被调用。
继承
pipe(StreamConsumer<RawSocketEvent> streamConsumer) Future
将此流的事件流入 streamConsumer
继承
receive() Datagram?
接收数据报。
reduce(RawSocketEvent combine(RawSocketEvent previous, RawSocketEvent element)) Future<RawSocketEvent>
通过重复应用combine来组合一系列值。
继承
send(List<int> buffer, InternetAddress address, int port) int
异步发送数据报。
setRawOption(RawSocketOption option) → void
自定义RawSocket
singleWhere(bool test(RawSocketEvent element), {RawSocketEvent orElse()?}) Future<RawSocketEvent>
找到与 test 匹配的该流中的单个元素。
继承
skip(int count) Stream<RawSocketEvent>
跳过从该流中来的前 count 个数据事件。
继承
skipWhile(bool test(RawSocketEvent element)) Stream<RawSocketEvent>
test 匹配的情况下跳过从该流中的数据事件。
继承
take(int count) Stream<RawSocketEvent>
提供最多 count 个该流中的数据事件。
继承
takeWhile(bool test(RawSocketEvent element)) Stream<RawSocketEvent>
test 判断为真时,转发数据事件。
继承
timeout(Duration timeLimit, {void onTimeout(EventSink<RawSocketEvent> sink)?}) Stream<RawSocketEvent>
创建一个具有与该流相同事件的新流。
继承
toList() Future<List<RawSocketEvent>>
将此流的所有元素收集到一个 List 中。
继承
toSet() Future<Set<RawSocketEvent>>
将此流的数据收集到Set中。
继承
toString() String
此对象的字符串表示形式。
继承
transform<S>(StreamTransformer<RawSocketEvent, S> streamTransformer) Stream<S>
streamTransformer应用于此流。
继承
where(bool test(RawSocketEvent event)) Stream<RawSocketEvent>
从本流创建一个新流,丢弃一些元素。
继承

操作符

operator ==(Object other) bool
相等操作符。
继承

静态方法

bind(dynamic host, int port, {bool reuseAddress = true, bool reusePort = false, int ttl = 1}) Future<RawDatagramSocket>
将套接字绑定到指定的hostport