![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Help
boolean © (2002-10-07 13:40:00)TServerSocket, TClientSocket. С клиента отправляю данные SendBuf.
На сервер принемаю RecieveBuf. Считываю из буфера по кусучкам. Отправляю 1 мой пакет. Считываю, сначала, 4 байта (узнаю длину 1-го моего пакета, потом остальное). Вопрос в том, что OnClientRead почему-то вызывается после этого еще раз, при этом Socket->ReceiveLength() равно 0. Когда я после этого еще раз посылаю данные, на клиенте срабатывает событие OnError, eeSend и клиент отрубается. Но когда я считываю из буфера сокета все данные за раз, то OnClientRead 2-й раз не срабатывает. И все нормально работает. Но я хочу считывать из буфера данных ровно на 1 мой пакет. В чем может быть загвоздка?
Rouse_ (2002-10-18 22:35:00) [1]В FAQ есть привер как именно это сделать
Желаю упехов
Digitman (2002-10-18 17:43:00) [2]Почем мне знать, откуда у тебя 60 нулей берутся ?)
Приводи код приемника и передатчика - разберемя, думаю
F1 (2002-10-18 17:06:00) [3]Дык я пробовал считывать меньше чем ReceiveLength -все вроде бы нормально, но могут появиться лишние данные - 60 нулей. Откуда они беруться???
Digitman (2002-10-18 14:38:00) [4]Считывать в OnRead() нужно ровно столько, сколько ожидается по логике по логике "машины состояния транспорта", но не более ReceiveLength()
Если же ReceiveLength = 0 и по логике машины состояния ничего не ожидается, ничего считывать не нужно - просто выход из обработчика OnRead()
F1 (2002-10-18 14:12:00) [5]Я тоже столкнулся с такой проблемой и не нашел другого решения, чем принимать все сразу, а потом разколбашивать что куда надо, иначе вообще хрень какая-то - лишние данные.