Показать сообщение отдельно
Старый 20.07.2012, 18:12   #34
DStalk
Разработчик
 
Аватар для DStalk
 
Регистрация: 27.06.2009
Адрес: Рязань-Москва
Сообщений: 471
Написано 401 полезных сообщений
(для 1,072 пользователей)
Ответ: Непонятки с TCP/IP

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

еще раз код:
ReceiveNetworkData(TCPclientID, *TCPBuffer,4)
TCPlength.i=PeekL(*TCPBuffer)
;temp.s=PeekS(*TCPBuffer,4)
;PrintN("Packet Length:"+Str(TCPlength)+"   "+temp)
;If TCPlength>1000:TCPlength=1000:PrintN("Packet error!"):EndIf
ReceiveNetworkData(TCPclientID, *TCPBuffer,TCPlength)
TCPPacket=PeekS(*TCPBuffer,TCPlength)
;PrintN(TCPPacket)
Я не считал полную длину именно считанных данных, как прелагал Пётр. Но все пришедшие пакеты полностью видны в консольке, соответственно можно посмотреть, где пакет "недочитался", где слишком много, что не пришло.

То что закоменчено, это как раз было логирование пришедших данных. И в случае ошибки в переменной temp было как раз начало следующего пакета, а должна быть по идее длина пакета - integer.
__________________
galaxies.su | dstalk.ru
(Offline)
 
Ответить с цитированием