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";
}
});
}
- 继承
-
- Object
- Stream<
RawSocketEvent> - 原始数据报套接字
属性
- address → InternetAddress
- 此套接字使用的地址。无设置器
- broadcastEnabled ↔ bool
- 是否启用了 IPv4 广播。获取/设置对
-
first → Future<
RawSocketEvent> - 此流的第一个元素。无设置器继承
- hashCode → int
- 此对象的哈希码。无设置器继承
- isBroadcast → bool
- 此流是否为广播流。无设置器继承
-
isEmpty → Future<
bool> - 此流是否包含任何元素。无设置器继承
-
last → Future<
RawSocketEvent> - 此流的最后一个元素。无设置器继承
-
length → Future<
int> - 此流中的元素数量。无设置器继承
- multicastHops ↔ int
- 从此套接字发出的多播包的最大网络跳数。获取/设置对
- multicastInterface ↔ NetworkInterface?
- 用于传出多播包的网络接口。获取/设置对
- multicastLoopback ↔ bool
- 是否将多播流量回环到主机。获取/设置对
- port → int
- 此套接字使用的端口号。无设置器
- readEventsEnabled ↔ bool
- 是否应该监听 RawDatagramSocket 的 RawSocketEvent.read 事件。获取/设置对
- runtimeType → Type
- 对象运行时类型的表示。无设置器继承
-
single → Future<
RawSocketEvent> - 此流的单个元素。无设置器继承
- writeEventsEnabled ↔ bool
- 是否应该监听 RawDatagramSocket 的 RawSocketEvent.write 事件。获取/设置对
方法
-
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> - 跳过与上一个数据事件相等的数据事件。继承
-
drain<
E> ([E? futureValue]) → Future< E> - 丢弃流上的所有数据,但在完成或发生错误时发出信号。继承
-
elementAt(
int index) → Future< RawSocketEvent> - 返回该流第
index
个数据事件的值。继承 -
every(
bool test(RawSocketEvent element)) → Future< bool> - 检查是否
test
接受流提供的所有元素。继承 -
expand<
S> (Iterable< S> convert(RawSocketEvent element)) → Stream<S> - 将流中的每个元素转换为元素序列。继承
-
firstWhere(
bool test(RawSocketEvent element), {RawSocketEvent orElse()?}) → Future< RawSocketEvent> - 查找匹配
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> - 创建一个包装流,从中拦截一些错误。继承
-
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> - 查找与此流匹配的单个元素。继承
-
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> > - 将此流的所有元素收集到一个列表中。继承
-
toSet(
) → Future< Set< RawSocketEvent> > - 将此流的数据收集到一个集合中。继承
-
toString(
) → String - 此对象的字符串表示。继承
-
transform<
S> (StreamTransformer< ) → Stream<RawSocketEvent, S> streamTransformerS> - 将
streamTransformer
应用于此流。继承 -
where(
bool test(RawSocketEvent event)) → Stream< RawSocketEvent> - 从此流中创建一个新的流,丢弃一些元素。继承
运算符
-
operator ==(
Object other) → bool - 等于运算符。继承