【发布时间】:2019-04-18 04:56:26
【问题描述】:
我的意思是,我已经阅读了有关 Dart RawSockets 的问题并阅读了 API,但我不清楚如何使用它们。 Dart RawSockets 和 C rawsockets 一样吗?
另外,Dart RawSockets 和普通 Sockets 有什么区别?
【问题讨论】:
标签: c sockets networking dart flutter
我的意思是,我已经阅读了有关 Dart RawSockets 的问题并阅读了 API,但我不清楚如何使用它们。 Dart RawSockets 和 C rawsockets 一样吗?
另外,Dart RawSockets 和普通 Sockets 有什么区别?
【问题讨论】:
标签: c sockets networking dart flutter
Socket 是一个更高级别的概念。它实现了一个Stream 字节(实际上是字节数组)和一个IOSink。 listen 到流和到达套接字的数据出现在流中。当你想通过套接字发送数据时,add 将它发送到接收器,然后它就会消失。
RawSocket 是较低级别的概念。现在,不是获取字节流,而是告诉您何时可以读取字节。 (当数据可用时,您会收到一个事件流。您有责任调用read 来收集它们。)这使您可以在使用select 的Unix 套接字模式下进行更多工作以了解有可用的数据,因此您在尝试读取时不会阻塞。
Dart 的流使您免去了选择/阻止读取/分离不同语言的阅读器线程的大部分责任。从Socket 读取时,您无需担心,数据会在可用时到达流中。
注意只有RawDatagramSocket。这是有道理的,因为 UDP 数据包是离散的,而不是字节流。 UDP 套接字只是告诉你有一个数据包可供读取,然后你就可以读取它。
【讨论】:
RawSocket 绝对是一个 TCP 套接字,就像 Dart 的 Socket 一样。