我的意思是,我已经阅读了有关Dart RawSockets的问题,还阅读了API,但是我不清楚如何使用它们。 Dart RawSockets与C rawsockets一样吗?
而且,Dart RawSockets和普通Sockets有什么区别?
答案 0 :(得分:2)
Socket
是一个更高层次的概念。它实现了Stream
个字节(实际上是字节数组)和一个IOSink
。 listen
流中,到达套接字的数据将出现在流中。当您想通过套接字发送数据时,add
将其发送到接收器,然后消失。
RawSocket
是下层概念。现在,不再需要获取字节流,而只是告诉您何时可以读取字节。 (您会获得一系列事件,告诉您何时有数据可用。您有责任然后调用read
来收集它们。)这使您可以在使用{{1}的Unix套接字模式下进行更多工作。 }知道有可用的数据,以便您在尝试读取数据时不会阻塞。
Dart的流使您免于选择/阻止不同语言的读取/分离读取器线程的大部分责任。从select
进行读取时,您不必担心,数据仅在可用时才到达流中。
请注意如何只有Socket
。这是有道理的,因为UDP数据包是离散的,而不是字节流。 UDP套接字仅告诉您可以读取一个包,然后读取它。