我的意思是,我已经阅读了有关Dart RawSockets的问题,还阅读了API,但是我不清楚如何使用它们。 Dart RawSockets与C rawsockets是否相同?

此外,Dart RawSockets和普通套接字之间有什么区别?

最佳答案

Socket是更高级别的概念。它实现字节的Stream(实际上是字节数组)和IOSink。流的listen和到达套接字的数据出现在流中。当您想通过套接字发送数据时,使用add将数据发送到接收器,然后将其移走。
RawSocket是较低级别的概念。现在,不再需要获取字节流,而只是告诉您何时可以读取字节。 (您将获得一系列事件,告诉您何时有数据可用。您有责任随后调用read进行收集。)这使您可以在Unix套接字模式下使用select来了解是否有可用数据,从而进行更多工作。这样您在阅读它时就不会阻塞。

Dart的流使您不必承担选择/阻止不同语言的读取/分离读取器线程的大部分责任。从Socket读取数据时,您不必担心,只要有数据,数据就会到达流中。

注意如何只有一个RawDatagramSocket。这是有道理的,因为UDP数据包是离散的,而不是字节流。 UDP套接字仅告诉您可以读取数据包,然后再读取它。

10-04 14:49