Использование буферов в режиме 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.