A Socket
- это концепция более высокого уровня.Он реализует Stream
байтов (фактически байтовых массивов) и IOSink
.listen
в поток, и данные, поступающие в сокет, появляются в потоке.Если вы хотите отправить данные по сокету, add
это в приемник, и он уходит.
A RawSocket
- это концепция нижнего уровня.Теперь вместо того, чтобы получить поток байтов, вам просто сообщают, когда байты доступны для чтения.(Вы получаете поток событий, сообщающий вам, когда данные доступны. Вы отвечаете за то, чтобы затем позвонить read
для их сбора.) Это позволяет вам больше работать в режиме сокета Unix, где вы используете select
, чтобы знать, чтоесть доступные данные, так что вы не блокируете их при попытке прочитать.
Потоки Дарт освобождают вас от большой ответственности за выбор / блокировку чтения / отдельного потока чтения различных языков.При чтении из Socket
вам не нужно беспокоиться, данные просто поступают в поток, когда они доступны.
Обратите внимание, что существует только RawDatagramSocket
.Это имеет смысл, поскольку UDP-пакеты являются дискретными, а не байтовым потоком.Сокет UDP просто сообщает вам, что пакет доступен для чтения, и вы затем читаете его.