Использование буферов в режиме TCP

После того как вы выделили память под буферы TX и RX, через них можно отправлять и принимать данные. TCP - потокоориентированный протокол, поэтому в буферах хранится именно поток отправляемых и принимаемых данных, без разделения на отдельные пакеты. Даже для исходящих данных вы не управляете тем, как они будут разбиты на пакеты при передаче по сети.

Отправка данных

Отправка данных выполняется в два шага. Сначала вы помещаете данные в буфер TX методом sock.setdata, а затем выполняете саму отправку (фиксируете данные) методом sock.send. Например:

sock.setdata ("Foo") ' Placed our data in the TX buffer - not being sent out yet.
' ... more code...
sock.setdata ("Bar") ' Added even more data to the TX buffer, waiting to be sent.
sock.send ' Now data will actually start going out. Data sent will be 'FooBar'.

Поскольку процесс двухшаговый, буфер можно заполнять постепенно, вплоть до предела, и только потом отправить его содержимое.

Примечание

TiOS работает в неблокирующем режиме. Это значит, что, например, после sock.send программа не останавливается в ожидании полной отправки данных. Выполнение продолжается сразу, ещё до того, как уйдёт первый байт. Программа не зависнет только из-за того, что вы приказали ей отправить большой объём данных.

Данные можно помещать в буфер TX в любой момент, но уйдут они только тогда, когда будет установлено сетевое соединение. Сохранение данных в буфере TX не заставит сокет автоматически устанавливать какое-либо соединение.

Приём данных

Приём данных выполняется за один шаг. Чтобы извлечь данные из буфера RX, используйте метод sock.getdata. Данные можно извлечь из буфера только один раз: после извлечения их в буфере уже нет. Например:

dim whatigot as string
whatigot = sock.getdata(255) 

Строка whatigot теперь содержит до 255 байт данных, полученных из буфера RX сокета.

Данные в буфере RX можно и просмотреть, не извлекая их. Для этого служит метод sock.peekdata.

Приём данных TCP продолжается в разделе Приём данных в режиме TCP.

Исходный материал Tibbo обновлён 12 сентября 2022Оригинал на docs.tibbo.com · Сообщить об ошибке