| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > TidTCPClient |
| Автор: Vovkin 11.10.2007, 23:40 | ||
| Набросал на TidTCPServer и TidTCPClient программки. И обнаружил очень непонятную работу клиентской части программы. Вот код.
В общем здесь по кнопке зпускается цикл, постоянно ожидаются данные с сервера и на него отправляются данные. Самое станное то, что если сервер закончил передачу даных то этот цикл постоянно возвлащает по ReadStream последние данные, которые принимались. При чём если убрать Write в цикле всё работает как надо. Если сервер закончил передавать сообщения, то и здесь цикл не будет ничего вычитавать (IdTCPClient.IOHandler.InputBuffer.Size = 0). Но если вставить Write как в вышеприведённом тексте, то цикл начинает постоянно молотить и возвращать последний принятый блок данных. Т.е. предположим IdTCPClient.IOHandler.InputBuffer.Size в начале цикла был 100 после всех чтений стал 0, но стоит сделать после этого Write и CheckForDataOnSource(1). Как IdTCPClient.IOHandler.InputBuffer.Size снова почему то равен размеру который был, т.е. 100 и по ReadStream возвращаются теже данные, хотя сервер больше ничего не передаёт. Кто знает как внутренняя кухня инди работает? Что здесь не правильно и как заставить это правильно работать? |
| Автор: Vovkin 12.10.2007, 00:12 |
| Ой. Уже разобрался. Дело вот в чём. Если отправитель делает Write с числом байт 0. То получатель проваливается с флагом наличия данных, но объём данных возвращает от последнего не равного 0 сообщения. У меня просто случайно получилось, что сервер вызывался write с нулём байт. |