|
recv выход из цикла
|
|||
---|---|---|---|
#18+
есть проблема чтения данных из сокета, а именно - протокол TCP/IP передает поток байтов от сервера к клиенту пакетами. Размер пакетов имеет разную длину, которые помещаются в буфер, из которого функция recv и считывает данные Приходится читать их в цикле. Проблема в том, что, при завершении приема данных, функция recv переходит в режим ожидания следующего пакета. Пример кода: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Цикл выбирает все данные из буфера и останавливается в режиме ожидания на строке Код: plaintext 1.
Какие есть варианты выхода из цикла? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 09:51 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Одно из двух: 1. Ты должен знать заранее сколько байт надо прочитать, т.е. перед данными передается их размер. 2. Есть какой-то маркер конца данных. Т.е. надо проверять что в принятом есть этот маркер. Обычно делают по первому варианту. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 09:59 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rb, почитай про setsockopt и опцию SO_RCVTIMEO ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 10:11 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dima TОдно из двух: 1. Ты должен знать заранее сколько байт надо прочитать, т.е. перед данными передается их размер. 2. Есть какой-то маркер конца данных. Т.е. надо проверять что в принятом есть этот маркер. Обычно делают по первому варианту. Первый вариант не подходит, а второй можно попробовать ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 10:18 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rb, Делаешь сокет O_NONBLOCK и читаешь в цикле пока recv не вернёт ошибку EWOULDBLOCK ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 11:13 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbесть проблема чтения данных из сокета, а именно - протокол TCP/IP передает поток байтов от сервера к клиенту пакетами. Нет, ты ошибаешься, передача TCP идёт потоком. Пакетов никаких нет. авторРазмер пакетов имеет разную длину, которые помещаются в буфер, из которого функция recv и считывает данные Приходится читать их в цикле. Проблема в том, что, при завершении приема данных, функция recv переходит в режим ожидания следующего пакета. Пример кода: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Цикл выбирает все данные из буфера и останавливается в режиме ожидания на строке Код: plaintext 1.
Какие есть варианты выхода из цикла? recv возвращает отрицательное число при закрытии сокета и прочих проблемах. Вот это и надо проверять. Всё это есть в документации. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 11:37 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
1. Ты должен знать заранее сколько байт надо прочитать, т.е. перед данными передается их размер. Это не обязательно. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 11:38 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbпротокол TCP/IP передает поток байтов от сервера к клиенту пакетами. "Неправильно ты, дядя Фёдор, бутерброд ешь." Надо говорить так: "протокол TCP/IP передает поток байтов". Точка. Никакого разделения на "пакеты", видимые прикладному уровню, в нём нет. Sergey_rbПроблема в том, что, при завершении приема данных, функция recv переходит в режим ожидания следующего пакета. Это не проблема. Проблема в том, что ты принятые байты не обрабатываешь сразу по принятии. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 11:46 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
MasterZivSergey_rbесть проблема чтения данных из сокета, а именно - протокол TCP/IP передает поток байтов от сервера к клиенту пакетами. Нет, ты ошибаешься, передача TCP идёт потоком. Пакетов никаких нет. авторРазмер пакетов имеет разную длину, которые помещаются в буфер, из которого функция recv и считывает данные Приходится читать их в цикле. Проблема в том, что, при завершении приема данных, функция recv переходит в режим ожидания следующего пакета. Пример кода: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Цикл выбирает все данные из буфера и останавливается в режиме ожидания на строке Код: plaintext 1.
Какие есть варианты выхода из цикла? recv возвращает отрицательное число при закрытии сокета и прочих проблемах. Вот это и надо проверять. Всё это есть в документации. Сокет не закрывается после получения данных ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 12:36 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbDima TОдно из двух: 1. Ты должен знать заранее сколько байт надо прочитать, т.е. перед данными передается их размер. 2. Есть какой-то маркер конца данных. Т.е. надо проверять что в принятом есть этот маркер. Обычно делают по первому варианту. Первый вариант не подходит, а второй можно попробовать Второй вариант не прокатил, т.к. в потоке есть символы перевода строки ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 12:40 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbСокет не закрывается после получения данных Поэтому-то твой цикл и не завершается. Обрабатывая данные внутри него. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 12:40 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSergey_rbСокет не закрывается после получения данных Поэтому-то твой цикл и не завершается. Обрабатывая данные внутри него. Не закрывается, потому что так устроен обмен. Увеличил размер буфера, чтобы в него гарантированно помещался весь объем принятых данных, Каждый раз размер данных получается разный. потому что передача идет пакетами, причем размер пакетов произвольный, поэтому считывать надо в цикле. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 12:59 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbКаждый раз размер данных получается разный. потому что передача идет пакетами, причем размер пакетов произвольный, поэтому считывать надо в цикле. Ты ещё не знаешь, что пакеты могут как делиться на части, так и склеиваться в один. Повторяю медленно: обрабатывай каждую принятую порцию данных внутри своего цикла. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 13:12 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSergey_rbКаждый раз размер данных получается разный. потому что передача идет пакетами, причем размер пакетов произвольный, поэтому считывать надо в цикле. Ты ещё не знаешь, что пакеты могут как делиться на части, так и склеиваться в один. Повторяю медленно: обрабатывай каждую принятую порцию данных внутри своего цикла. Я их обрабатываю Мне надо знать, когда функция recv считала последний пакет. проверка на количество считанных байтов не подходит, т.к. оно больше 0 Проверка на наличие символа \n тоже не прокатывает, т.к. в пакете есть символы перевода строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 13:40 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
В INDY сначала считывается количество полученных строк, затем считываются строки. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 13:45 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbМне надо знать, когда функция recv считала последний пакет. Не существует в природе никакого "последнего пакета". За исключением того, после которого соединение закрывается. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 14:09 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbВ INDY сначала считывается количество полученных строк Значит инди сначала передаёт количество передаваемых строк. О чём тебе и говорили: передавай длину данных перед самими данными. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 14:11 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSergey_rbМне надо знать, когда функция recv считала последний пакет. Не существует в природе никакого "последнего пакета". За исключением того, после которого соединение закрывается. да не закрывается соединение. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 14:19 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSergey_rbВ INDY сначала считывается количество полученных строк Значит инди сначала передаёт количество передаваемых строк. О чём тебе и говорили: передавай длину данных перед самими данными. Не могу я менять алгоритм работы сервера, т.к. на нем крутятся терминалы ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 14:29 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Ну тогда ничего не поделаешь, придётся применять мозг или нанимать программиста. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 16:19 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovНу тогда ничего не поделаешь, придётся применять мозг или нанимать программиста. Так где же взять этого программиста? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 16:24 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Локализовал проблему - при получении 2-х пакетов, теряется первый пакет, т.е. функция выдает к-то байт, но сам буфер пустой. Поставил Код: plaintext 1.
Не помогло. Есть подозрение, что буфере остается мусор от предыдущих запросов ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 16:56 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbпри получении 2-х пакетов, теряется первый пакет, т.е. функция выдает к-то байт, но сам буфер пустой. Что логично, поскольку ты и принимаешь в один буфер и складываешь в одно место, так что каждый следующий принятый кусок затирает предыдущий. Включи уже голову. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 17:42 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSergey_rbпри получении 2-х пакетов, теряется первый пакет, т.е. функция выдает к-то байт, но сам буфер пустой. Что логично, поскольку ты и принимаешь в один буфер и складываешь в одно место, так что каждый следующий принятый кусок затирает предыдущий. Включи уже голову. если речь идет о этой строке, авторtmp = cp1251toUtf8(rbuff,res); То я выложил не всю обработку Код: plaintext 1. 2.
Первый пакет теряется даже в случает двух вызовов recv Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 18:00 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbПервый пакет теряется даже в случает двух вызовов recv Это очередной псевдокод или этот бред реально написан в программе? Он в принципе не работоспособен от "strlen()" и ниже. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 18:16 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSergey_rbПервый пакет теряется даже в случает двух вызовов recv Это очередной псевдокод или этот бред реально написан в программе? Он в принципе не работоспособен от "strlen()" и ниже. Это рабочий код ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 18:58 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbЭто рабочий код Это бредовый код, который по определению не может работать. Sergey_rb Код: sql 1.
Ага, щаззз. В буфере лежит просто пачка байт уже известной длины, а не null-terminated string. Только stupid luck не позволяет тебе получить AV в этом месте. Sergey_rb Код: sql 1.
recv() занёс в буфер килобайтной длины три байта, но ты упорно пытаешься перекодировать весь килобайт. Ню-ню... Ниже этот бред повторён два раза. Sergey_rb Код: sql 1.
Угу, из двух принятых кусков ты добавляешь к строке только последний и удивляешься куда пропал первый. "Поздравляю, Шарик..." (с) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 19:18 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Строка Код: plaintext 1.
Действительно выдает длину строки, т.к. сервер выдает нул терминатед строку Код: plaintext 1.
Если в буфере есть данные, то они конвертируются и выводятся в сообщении Код: plaintext 1.
Это можно было здесь и не писать, т.к. я отладку веду через MessageDox ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 19:32 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbДействительно выдает длину строки, т.к. сервер выдает нул терминатед строку То, что сервер её выдаёт, ещё не значит, что она дойдёт до тебя вся за один recv(). Ты можешь получить первые пять байт сейчас, ещё два байта потом и последний байт когда-нибудь. Sergey_rbЕсли в буфере есть данные, то они конвертируются и выводятся в сообщении Повторяю медленно чисто из-за пятницы: если в буфере всего два принятых на этот раз байта, а остальное набито мусором, оставшимся от предыдущих чтений, то что там у тебя сконвертируется?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 20:07 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Я не знаю, что в буфере, поэтому и пришел за советом ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 21:13 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rb, ты вроде как паскалист? Найди и скачай книгу: Антон Григорьев "О чем не пишут в книгах по Delphi" Там есть отдельная глава, где подробно и понятно описана работа с tcp и достаточно примеров рабочего кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 22:18 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
На Дельфи у меня все давно написано, сервер и терминалы работают по TCP уже лет пять. Но один му**ло купил партию терминалов с WinCe7, на которой Паскаль программы не запускаются. Теперь, чтобы исправить его косяк, мне надо написать прогу под WinCe7 на каком-то другом языке. Единственная среда разработки под WinCe, которая не зависит от версии винды, это древний Embedded C++, который работает у меня на виртуальной машине под WinXP, потому что на более новых версиях он не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 22:49 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbНа Дельфи у меня все давно написано, сервер и терминалы работают по TCP уже лет пять. Но один му**ло купил партию терминалов с WinCe7, на которой Паскаль программы не запускаются. Теперь, чтобы исправить его косяк, мне надо написать прогу под WinCe7 на каком-то другом языке. Единственная среда разработки под WinCe, которая не зависит от версии винды, это древний Embedded C++, который работает у меня на виртуальной машине под WinXP, потому что на более новых версиях он не работает. Ты какую-то лишнюю инфу выдаешь. При чем тут XP, виртмашины, кто там что купил? Если нужно на другом языке работать - куда деваться. И никакой разницы - паскаль, не паскаль. Работа с tcp сокетами не зависит от языка. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 23:20 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
КотовасияРабота с tcp сокетами не зависит от языка. Мышевозники и компонентокидатели испытывают определённые трудности при переходе от использования готовых фреймворков к настоящему программированию. В Дельфи за аффтара всё делало INDY. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2018, 00:38 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovКотовасияРабота с tcp сокетами не зависит от языка. Мышевозники и компонентокидатели испытывают определённые трудности при переходе от использования готовых фреймворков к настоящему программированию. В Дельфи за аффтара всё делало INDY. В Indy тоже не так все на шару, как выяснилось. Потоки tcp сами собой в атомарные сообщения не превращаются. Вообще, непонятно, что там ТС конкретно переделывает из паскаля, вот там работало, а тут уже не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2018, 00:46 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
В Indy все просто - На сервере Код: pascal 1.
Предает набор строк На клиенте Код: pascal 1.
Получает набор строк и запихивает в StringList. И никаких циклов, потерь данных и прочего мусора. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2018, 04:40 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rb, ты книгу Антона Григорьева нашел, скачал, изучаешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2018, 12:25 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Для тех, кто не верит, что TPC/IP передает данные пакетами. авторЧто такое протоколы TCP/IP TCP — Transfer Control Protocol. Протокол управления передачей. Он служит для обеспечения и установление надежного соединения между двумя устройствами и надежную передачу данных. При этом протокол TCP контролирует оптимальный размер передаваемого пакета данных , осуществляя новую посылку при сбое передачи. IP — Internet Protocol. Интернет протокол или адресный протокол — основа всей архитектуры передачи данных. Протокол IP служит для доставки сетевого пакета данных по нужному адресу. При этом информация разбивается на пакеты , которые независимо передвигаются по сети до нужного адресата. https://webonto.ru/protokolyi-tcp-ip-prostyim-yazyikom/ ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 14:35 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rb, а это тебя в общем случае не касается, как там данные передаются. Тебя касается лишь то, как ты данные получаешь с помошью твоего api. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 14:46 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbДля тех, кто не верит, что TPC/IP передает данные пакетами. А толку? Размер IP пакета не совпадает с размером твоего сообщения, поэтому за раз можно получить как целое сообщение так и часть сообщения. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 14:51 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dima TSergey_rbДля тех, кто не верит, что TPC/IP передает данные пакетами. А толку? Размер IP пакета не совпадает с размером твоего сообщения, поэтому за раз можно получить как целое сообщение так и часть сообщения. Как определить, что пришла только часть сообщения? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 15:41 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbDima Tпропущено... А толку? Размер IP пакета не совпадает с размером твоего сообщения, поэтому за раз можно получить как целое сообщение так и часть сообщения. Как определить, что пришла только часть сообщения? Алгоримом. В книжке, упомянутой мной ранее, есть эти алгоритмы. Ты нашел, скачал, изучил, но не понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 15:43 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
КотовасияSergey_rb, а это тебя в общем случае не касается, как там данные передаются. Тебя касается лишь то, как ты данные получаешь с помошью твоего api. Я получаю функцией recv и она может вернуть как сообщение целиком, так и часть сообщения. Нюанс в том, что после отправки сообщения, сервер не закрывает соединение с клиентом. Поэтому нельзя отловить конец сообщения результатом recv < 0, как предлагается делать в примерах. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 15:47 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
КотовасияSergey_rbпропущено... Как определить, что пришла только часть сообщения? Алгоримом. В книжке, упомянутой мной ранее, есть эти алгоритмы. Ты нашел, скачал, изучил, но не понял? Причем здесь Дельфи? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 15:47 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbDima Tпропущено... А толку? Размер IP пакета не совпадает с размером твоего сообщения, поэтому за раз можно получить как целое сообщение так и часть сообщения. Как определить, что пришла только часть сообщения? Я вторым постом написал как 21688779 , но ты не веришь и упорно ищешь несуществующий способ. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 15:48 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dima TSergey_rbпропущено... Как определить, что пришла только часть сообщения? Я вторым постом написал как 21688779 , но ты не веришь и упорно ищешь несуществующий способ. авторОдно из двух: 1. Ты должен знать заранее сколько байт надо прочитать, т.е. перед данными передается их размер. 2. Есть какой-то маркер конца данных. Т.е. надо проверять что в принятом есть этот маркер. 1. Да, передается размер, но это размер не всего сообщения, а текущего пакета. 2. Что за маркер, это какой-то специальный символ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 15:51 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbDima Tпропущено... Я вторым постом написал как 21688779 , но ты не веришь и упорно ищешь несуществующий способ. авторОдно из двух: 1. Ты должен знать заранее сколько байт надо прочитать, т.е. перед данными передается их размер. 2. Есть какой-то маркер конца данных. Т.е. надо проверять что в принятом есть этот маркер. 1. Да, передается размер, но это размер не всего сообщения, а текущего пакета. 2. Что за маркер, это какой-то специальный символ? 1. О каком размере речь? О том что recv() вернул? Я про то чтобы сервер сначала передал размер данных, а затем сами данные. 2. Да, символ (или последовательность символов) заведомо не использующийся внутри сообщения. Например в протоколе HTTP конец заголовка это два перевода строки подряд. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 16:03 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dima TSergey_rbпропущено... пропущено... 1. Да, передается размер, но это размер не всего сообщения, а текущего пакета. 2. Что за маркер, это какой-то специальный символ? 1. О каком размере речь? О том что recv() вернул? Я про то чтобы сервер сначала передал размер данных, а затем сами данные. 2. Да, символ (или последовательность символов) заведомо не использующийся внутри сообщения. Например в протоколе HTTP конец заголовка это два перевода строки подряд. 1.У меня на сервере работают 100 терминалов и я не могу менять логику его работы 2.Два перевода строки подряд могут быть в любом тексте. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 16:17 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Для общего развития: допустим ты передал строку Код: plaintext
Код: plaintext
TCP гарантирует что эти 3 пакета придут именно в той последовательности, как ты отправил, т.е. 2-й не придет раньше 1-го, но НЕ гарантирует что ты получишь все 3 вместе, т.е. может прийти например 1-й, а затем 2,3 вместе. Это один из вариантов. В реальности пакет побольше ~1.5 кб, и может быть наоборот ситуация, когда в одном пакете несколько строк или начало в одном пакете, а конец в другом. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 16:18 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbКотовасияпропущено... Алгоримом. В книжке, упомянутой мной ранее, есть эти алгоритмы. Ты нашел, скачал, изучил, но не понял? Причем здесь Дельфи? Да, при чем? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 16:18 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rb1.У меня на сервере работают 100 терминалов и я не могу менять логику его работы Что мешает работать по аналогии с терминалом? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 16:23 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dima TДля общего развития: допустим ты передал строку Код: plaintext
Код: plaintext
TCP гарантирует что эти 3 пакета придут именно в той последовательности, как ты отправил, т.е. 2-й не придет раньше 1-го, но НЕ гарантирует что ты получишь все 3 вместе, т.е. может прийти например 1-й, а затем 2,3 вместе. Это один из вариантов. В реальности пакет побольше ~1.5 кб, и может быть наоборот ситуация, когда в одном пакете несколько строк или начало в одном пакете, а конец в другом. И как мне это собрать в правильную последовательность строк? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 16:27 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dima TSergey_rb1.У меня на сервере работают 100 терминалов и я не могу менять логику его работы Что мешает работать по аналогии с терминалом? Терминальная прога написана на Лазарусе и там, аналог функции recv, возвращает сообщение целиком, а не кусками. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 16:29 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Фееричный топик. Почему-то в последнее время я видел несколько похожих проблем вокруг себя. Да и сам (как ни странно) решаю сейчас аналогичную. Что же это, нашествие телепузиков в индустрию? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 16:41 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
MasterZivФееричный топик. Почему-то в последнее время я видел несколько похожих проблем вокруг себя. Да и сам (как ни странно) решаю сейчас аналогичную. Что же это, нашествие телепузиков в индустрию? Это всего лишь одна, криво написанная, функция recv. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 16:43 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Решил вернуться к истокам, так сказать, проблемы... Sergey_rbПроблема в том, что, при завершении приема данных, функция recv переходит в режим ожидания следующего пакета. Это нормальное поведение этой фукнции. Так и должно быть. Sergey_rbПример кода: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Цикл выбирает все данные из буфера и останавливается в режиме ожидания на строке Это тоже нормально, и цикл нормальный. Sergey_rbКакие есть варианты выхода из цикла? На самом деле из этого цикла вообще выходить не надо . Как у тебя написано, так правильно, и так и должно всё работать. Ты выбираешь данные, обрабатываешь их когда надо, потом выбираешь следующие. (т.е. в цикл надо ещё где-то добавить обработку этих данных). Когда клиент завершает соединение, он закроет сокет, и твой recv вернёт что-то меньше 0-ля и твой цикл завершится. После этого ты должен закрыть серверный сокет , возможно, что-то ещё освободить и завершить с серверной стороны, и завершить серверный поток (либо сокет убрать из числа обрабатываемых). А что же ты хочешь в твоём вопросе -- не понятно вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 16:48 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
MasterZivРешил вернуться к истокам, так сказать, проблемы... Sergey_rbПроблема в том, что, при завершении приема данных, функция recv переходит в режим ожидания следующего пакета. Это нормальное поведение этой фукнции. Так и должно быть. Sergey_rbПример кода: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Цикл выбирает все данные из буфера и останавливается в режиме ожидания на строке Это тоже нормально, и цикл нормальный. Sergey_rbКакие есть варианты выхода из цикла? На самом деле из этого цикла вообще выходить не надо . Как у тебя написано, так правильно, и так и должно всё работать. Ты выбираешь данные, обрабатываешь их когда надо, потом выбираешь следующие. (т.е. в цикл надо ещё где-то добавить обработку этих данных). Когда клиент завершает соединение, он закроет сокет, и твой recv вернёт что-то меньше 0-ля и твой цикл завершится. После этого ты должен закрыть серверный сокет , возможно, что-то ещё освободить и завершить с серверной стороны, и завершить серверный поток (либо сокет убрать из числа обрабатываемых). А что же ты хочешь в твоём вопросе -- не понятно вообще. Я на каждой странице пишу одну фразу - соединение, после передачи данных, не закрывается! ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 16:51 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbЯ на каждой странице пишу одну фразу - соединение, после передачи данных, не закрывается! И тебе каждый раз на это отвечают, что это совершенно пофиг. Тебе не нужно выходить из цикла. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 16:59 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSergey_rbЯ на каждой странице пишу одну фразу - соединение, после передачи данных, не закрывается! И тебе каждый раз на это отвечают, что это совершенно пофиг. Тебе не нужно выходить из цикла. В этом случае recv останавливается, ждет следующей порции данных от сервера и программа зависает. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:04 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbВ этом случае recv останавливается, ждет следующей порции данных от сервера и программа зависает. ОБРАБАТЫВАЙ ПРИНЯТЫЕ ДАННЫЕ ВНУТРИ ЦИКЛА по мере их поступления. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:11 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
После обработки последнего пакета, recv ничего не возвращает, а ждет новый пакет. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:23 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbDima Tпропущено... Что мешает работать по аналогии с терминалом? Терминальная прога написана на Лазарусе и там, аналог функции recv, возвращает сообщение целиком, а не кусками. Если терминальная прога работает, значит можно тоже самое повторить в любой другой проге. Чудес не бывает. recv() получает все тоже самое что и терминальная прога, проблема тут только в том что ты не можешь корректно запустить recv(). Наверно где-то есть описание протокола обмена, т.е. описание в каком формате сервер дает ответ, надо только поискать. Если нет, то запиши входящие данные в файл и смотри что там "лишнее", т.к. лишней там будет вспомогательная инфа для определения границ сообщений. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:27 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dima TSergey_rbпропущено... Терминальная прога написана на Лазарусе и там, аналог функции recv, возвращает сообщение целиком, а не кусками. Если терминальная прога работает, значит можно тоже самое повторить в любой другой проге. Чудес не бывает. recv() получает все тоже самое что и терминальная прога, проблема тут только в том что ты не можешь корректно запустить recv(). Наверно где-то есть описание протокола обмена, т.е. описание в каком формате сервер дает ответ, надо только поискать. Если нет, то запиши входящие данные в файл и смотри что там "лишнее", т.к. лишней там будет вспомогательная инфа для определения границ сообщений. Я прекрасно знаю, в каком формате передается информация с сервера, т.к. я сам его написал. А передается она в виде строк, разделенными символами переноса строк 13 и 10. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:29 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbDima Tпропущено... Если терминальная прога работает, значит можно тоже самое повторить в любой другой проге. Чудес не бывает. recv() получает все тоже самое что и терминальная прога, проблема тут только в том что ты не можешь корректно запустить recv(). Наверно где-то есть описание протокола обмена, т.е. описание в каком формате сервер дает ответ, надо только поискать. Если нет, то запиши входящие данные в файл и смотри что там "лишнее", т.к. лишней там будет вспомогательная инфа для определения границ сообщений. Я прекрасно знаю, в каком формате передается информация с сервера, т.к. я сам его написал. А передается она в виде строк, разделенными символами переноса строк 13 и 10. ОЛЛО! ОБРАБАТЫВАЙ ПРИНЯТЫЕ ДАННЫЕ ВНУТРИ ЦИКЛА по мере их поступления. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:32 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbТерминальная прога написана на Лазарусе и там, аналог функции recv, возвращает сообщение целиком, а не кусками. Как функция в лазарусе называется? Если исходники той проги есть, то покажи как прием прописан, быстрее помогут на С++ переписать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:34 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dima TSergey_rbТерминальная прога написана на Лазарусе и там, аналог функции recv, возвращает сообщение целиком, а не кусками. Как функция в лазарусе называется? Если исходники той проги есть, то покажи как прием прописан, быстрее помогут на С++ переписать. Это я тоже уже писал на предыдущей странице авторВ Indy все просто - На сервере WriteStrings Предает набор строк На клиенте ReadStrings Получает набор строк и запихивает в StringList. И никаких циклов, потерь данных и прочего мусора. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:36 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Возможно, единственный выход - это, как было предложено, искать два переноса строк подряд, но это уже совсем лоховская тема. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:37 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbавторВ Indy все просто - На сервере WriteStrings Предает набор строк На клиенте ReadStrings Получает набор строк и запихивает в StringList. И никаких циклов, потерь данных и прочего мусора. Я так подозреваю что все циклы и прочий "мусор" спрятаны внутри этих функций. Подобные вещи не стандартизированы, поэтому за пределами твоего Indy это не работает и надо разбираться как оно реально устроено в Indy. Сделай WriteStrings() двух строк "123" и "abc", прими recv() все что придет, запиши в файл и выложи сюда этот файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:46 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbВозможно, единственный выход - это, как было предложено, искать два переноса строк подряд, но это уже совсем лоховская тема. Я это не предлагал. Это был пример как отделен заголовок в протоколе HTTP. У тебя не HTTP, поэтому не надо искать то чего нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:47 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbЭто я тоже уже писал на предыдущей странице Писать-то ты горазд, но вот заглянуть в исходники WriteStrings() и прочитать их - тебе уже не по плечу. Sergey_rbВозможно, единственный выход - это, как было предложено, искать два переноса строк подряд С какого перепою ты решил, что твой сервер следует соглашениям HTTP? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:50 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dima TSergey_rbпропущено... Я так подозреваю что все циклы и прочий "мусор" спрятаны внутри этих функций. Подобные вещи не стандартизированы, поэтому за пределами твоего Indy это не работает и надо разбираться как оно реально устроено в Indy. Сделай WriteStrings() двух строк "123" и "abc", прими recv() все что придет, запиши в файл и выложи сюда этот файл. Для небольших сообщений, менее 2 Кб все прекрасно работает, т.к. это сообщения помещаются в один пакет. Проблема начинается при приеме больших сообщений, т.к. протокол разбивает их на пакеты. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:51 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbПроблема начинается при приеме больших сообщений, т.к. протокол разбивает их на пакеты. Да, именно так работает TCP и именно это тебе твердят с самого начала. Но до тебя никак не доходит. Видимо, твой мозг работает по UDP. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:52 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSergey_rbЭто я тоже уже писал на предыдущей странице Писать-то ты горазд, но вот заглянуть в исходники WriteStrings() и прочитать их - тебе уже не по плечу. Sergey_rbВозможно, единственный выход - это, как было предложено, искать два переноса строк подряд С какого перепою ты решил, что твой сервер следует соглашениям HTTP? 1. Смотрел, там сначала берется количество строк, затем они считываются. 2. Я писал, что использую протокол HTTP? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:53 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbВозможно, единственный выход - это, как было предложено, искать два переноса строк подряд, но это уже совсем лоховская тема. Ты хотя бы ПЕРВЫЙ ПЕРЕНОС СТРОК НАЙДИ , блин... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:53 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSergey_rbПроблема начинается при приеме больших сообщений, т.к. протокол разбивает их на пакеты. Да, именно так работает TCP и именно это тебе твердят с самого начала. Но до тебя никак не доходит. Видимо, твой мозг работает по UDP. Они работают в режиме открытия и закрытия сокета. В моем сервере, сокет, после отправки/принятия сообщения, не рвет соединение. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:54 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbDima Tпропущено... Я так подозреваю что все циклы и прочий "мусор" спрятаны внутри этих функций. Подобные вещи не стандартизированы, поэтому за пределами твоего Indy это не работает и надо разбираться как оно реально устроено в Indy. Сделай WriteStrings() двух строк "123" и "abc", прими recv() все что придет, запиши в файл и выложи сюда этот файл. Для небольших сообщений, менее 2 Кб все прекрасно работает, т.к. это сообщения помещаются в один пакет. Проблема начинается при приеме больших сообщений, т.к. протокол разбивает их на пакеты. Ты хочешь проблему решить или доказать что она нерешаемая? Если первое - сделай то что я попросил сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:55 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSergey_rbПроблема начинается при приеме больших сообщений, т.к. протокол разбивает их на пакеты. Да, именно так работает TCP и именно это тебе твердят с самого начала. Но до тебя никак не доходит. Видимо, твой мозг работает по UDP. Да не разбивает он ничего, не дури голову парню... И так плохо с этим. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:55 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rb1. Смотрел, там сначала берется количество строк, затем они считываются. Считываются... Во WriteStrings... Ага... Ты, походу, совсем безнадёжен. Sergey_rb2. Я писал, что использую протокол HTTP? ДА. Прямо тут: Sergey_rbискать два переноса строк подряд Или ты не понимаешь даже то, что пишешь?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:57 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rb Для небольших сообщений, менее 2 Кб все прекрасно работает, т.к. это сообщения помещаются в один пакет. Проблема начинается при приеме больших сообщений, т.к. протокол разбивает их на пакеты. Никто никуда ничего не разбивает. ТЫ ЭТО ДЕЛАЕШЬ САМ! Вот твой код: Код: plaintext 1.
Прочитай про третий параметр функции recv . ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:58 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dima TSergey_rbпропущено... Для небольших сообщений, менее 2 Кб все прекрасно работает, т.к. это сообщения помещаются в один пакет. Проблема начинается при приеме больших сообщений, т.к. протокол разбивает их на пакеты. Ты хочешь проблему решить или доказать что она нерешаемая? Если первое - сделай то что я попросил сделать. Запрос на сервер автор0|CONNECT| Получено с сервера автор607|Подключено| ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:59 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, MasterZiv. На 99% уверен что в его Indy встроенный самопальный протокол передачи набора строк. Не зря же WriteString s ()/ReadString s () Осталось увидеть что там в реале идет и будет все понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 17:59 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
MasterZivSergey_rbДля небольших сообщений, менее 2 Кб все прекрасно работает, т.к. это сообщения помещаются в один пакет. Проблема начинается при приеме больших сообщений, т.к. протокол разбивает их на пакеты. Никто никуда ничего не разбивает. ТЫ ЭТО ДЕЛАЕШЬ САМ! Вот твой код: Код: plaintext 1.
Прочитай про третий параметр функции recv . Размер буфера 10*1024, данных приходит максимум 5*1024 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:00 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbDima Tпропущено... Ты хочешь проблему решить или доказать что она нерешаемая? Если первое - сделай то что я попросил сделать. Запрос на сервер автор0|CONNECT| Получено с сервера автор607|Подключено| Я это просил? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:00 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSergey_rb2. Я писал, что использую протокол HTTP? ДА. Прямо тут: Sergey_rbискать два переноса строк подряд Или ты не понимаешь даже то, что пишешь?.. Дима, ну нет же, не писал он это. А одной пустой строкой во многих протоколах можно данные отделять (POP3 например), в том числе, в своём собственном. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:00 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbMasterZivпропущено... Никто никуда ничего не разбивает. ТЫ ЭТО ДЕЛАЕШЬ САМ! Вот твой код: Код: plaintext 1.
Прочитай про третий параметр функции recv . Размер буфера 10*1024, данных приходит максимум 5*1024 Значит, они просто не посылаются в таком объёме (10k) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:01 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dima TDimitry Sibiryakov, MasterZiv. На 99% уверен что в его Indy встроенный самопальный протокол передачи набора строк. Не зря же WriteString s ()/ReadString s () Осталось увидеть что там в реале идет и будет все понятно. Strings в Делфи - это набор строк, что-то вроде вектора в C++ ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:01 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
MasterZivSergey_rbпропущено... Размер буфера 10*1024, данных приходит максимум 5*1024 Значит, они просто не посылаются в таком объёме (10k) Данные могут приходит в любом объеме, начиная от одного символа. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:03 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbStrings в Делфи - это набор строк, что-то вроде вектора в C++Тайна третьей планеты- Человек - царь природы - Только звери об этом не знают - они неграмотныеЭто я к тому, что поток байтов не в курсе про векторы, дельфи и кресты. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:03 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
надо Код: plaintext 1. 2. 3. 4.
затем result.bin выложить сюда ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:03 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbDima TDimitry Sibiryakov, MasterZiv. На 99% уверен что в его Indy встроенный самопальный протокол передачи набора строк. Не зря же WriteString s ()/ReadString s () Осталось увидеть что там в реале идет и будет все понятно. Strings в Делфи - это набор строк, что-то вроде вектора в C++ Это пофиг. TCP - это поток байт, а какой логический смысл в этих байтах для TCP без разницы. Сделай прием короткого сообщения как я выше написал 21691688 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:08 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dima TSergey_rbпропущено... Strings в Делфи - это набор строк, что-то вроде вектора в C++ Это пофиг. TCP - это поток байт, а какой логический смысл в этих байтах для TCP без разницы. Сделай прием короткого сообщения как я выше написал 21691688 Какой в С++ аналог ExtractFileDir(ParamStr(0))? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:11 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dima TНа 99% уверен что в его Indy встроенный самопальный протокол передачи набора строк. Не зря же WriteStrings()/ReadStrings() В моей версии инди таких функций вообще нет. Точнее они есть, но только как приватные в FTP компонентах и они отсылают TStrings.Text как есть. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:11 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
По-моему аффтар уже слился до тупого троллинга. Мастер, закрывай топик. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:12 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Вот тот самый пакет, который принят не до конца Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:16 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Видно, что последняя строка выгружена не вся Перевода строки тоже нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:19 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbВидно, что последняя строка выгружена не вся Перевода строки тоже нет. Мдя ... :( Сложно это сделать 21691688 на маленьком сообщении? которое целиком приходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:26 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovПо-моему аффтар уже слился до тупого троллинга. Мастер, закрывай топик. Дайте ему шанс. Аффтар похоже просто в истерике из-за непонимания что реально происходит. Я бы посоветовал просто проспаться и утром продолжить. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:31 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbDima Tпропущено... Это пофиг. TCP - это поток байт, а какой логический смысл в этих байтах для TCP без разницы. Сделай прием короткого сообщения как я выше написал 21691688 Какой в С++ аналог ExtractFileDir(ParamStr(0))? Посмотри на параметры своей стартовой функци. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 18:33 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dima TSergey_rbВидно, что последняя строка выгружена не вся Перевода строки тоже нет. Мдя ... :( Сложно это сделать 21691688 на маленьком сообщении? которое целиком приходит. Завтра сделаю ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 19:10 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Завтра еще поищи исходник WriteStrings(). Если это правда 21691701 , то это функция из какой-то твоей внутренней либы. Возможно досталась тебе как часть наработок твоего предприятия. Найдешь - выкладывай сюда. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 19:24 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Это стандартные функции INDY ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 19:59 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovDima TНа 99% уверен что в его Indy встроенный самопальный протокол передачи набора строк. Не зря же WriteStrings()/ReadStrings() В моей версии инди таких функций вообще нет. Точнее они есть, но только как приватные в FTP компонентах и они отсылают TStrings.Text как есть. Судя по всему, у ТС 9-я версия, там это есть, да и в доках к лазарусу сказано, что у них 9-я. WriteStrings Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
WriteInteger Код: pascal 1. 2. 3. 4. 5. 6. 7.
Writeln Код: pascal 1. 2. 3. 4. 5. 6. 7. 8.
Write Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9.
Ну и вот самое интересное: WriteBuffer(). WriteBuffer Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52.
... Т.е., при отправлении блока строк (из объекта TStrings) сперва (возможно) отправляется количество строк. Потом - каждая строка, дополненная cr+lf. В каждом "отправлении" (при вызове метода WriteBuffer) физически сперва передается длина блока данных, потом - сам блок. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 20:31 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Да, у меня 9 версия INDY. авторВ каждом "отправлении" (при вызове метода WriteBuffer) физически сперва передается длина блока данных, потом - сам блок. Вот только функция recv эту длину почему-то не видит, а выдает размер принятого пакета. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 21:09 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbВот только функция recv эту длину почему-то не видит Ей это и не надо. Это функция транспортного уровня, она принимает простой поток байт. До протоколов уровня приложения ей дела нет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 21:14 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSergey_rbВот только функция recv эту длину почему-то не видит Ей это и не надо. Это функция транспортного уровня, она принимает простой поток байт. До протоколов уровня приложения ей дела нет. Тогда должна быть другая функция, которая работает на уровне протокола. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 21:53 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbТогда должна быть другая функция, которая работает на уровне протокола. Да. И это, внезапно, ReadStrings из INDY. Потому что протокол не зря называется "уровня приложения". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2018, 22:05 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
КотовасияТ.е., при отправлении блока строк (из объекта TStrings) сперва (возможно) отправляется количество строк. Потом - каждая строка, дополненная cr+lf. В каждом "отправлении" (при вызове метода WriteBuffer) физически сперва передается длина блока данных, потом - сам блок. Осталось увидеть дамп принятого сообщения 21691688 и все станет понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 08:15 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Первое сообщение автор607|192.168.96.204|Подключено| Заканчивается переводом строки 13 10 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 08:36 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Вот это более правильное сообщение, заканчивается двумя переводами строки Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 08:39 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSergey_rbТогда должна быть другая функция, которая работает на уровне протокола. Да. И это, внезапно, ReadStrings из INDY. Потому что протокол не зря называется "уровня приложения". Никто и не просит функцию recv выдавать форматированный текст, ее задача вытащить все данные из сокета, с которой она справляется, но не всегда... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 08:41 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbНикто и не просит функцию recv выдавать форматированный текст, ее задача вытащить все данные из сокета, с которой она справляется, но не всегда... recv() работает совсем не так как ты ожидаешь. PS Дамп будет 21691688 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 08:48 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dima TSergey_rbНикто и не просит функцию recv выдавать форматированный текст, ее задача вытащить все данные из сокета, с которой она справляется, но не всегда... recv() работает совсем не так как ты ожидаешь. PS Дамп будет 21691688 ? Я же выложил ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 08:54 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbЯ же выложил Где result.bin ? Если ты думаешь что копипаст содержимого сообщений это то что мне интересно, то ты ошибаешься, ты скопипастил только ненужную инфу. Надо все принятое с точностью до байта записать в файл, и файл сюда выложить. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 09:07 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dima TSergey_rbЯ же выложил Где result.bin ? Если ты думаешь что копипаст содержимого сообщений это то что мне интересно, то ты ошибаешься, ты скопипастил только ненужную инфу. Надо все принятое с точностью до байта записать в файл, и файл сюда выложить. Предварительно, я посмотрел HEX этого файла Он заканчивается двумя переводами строк ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 09:15 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Котовасия... Т.е., при отправлении блока строк (из объекта TStrings) сперва (возможно) отправляется количество строк. Потом - каждая строка, дополненная cr+lf. В каждом "отправлении" (при вызове метода WriteBuffer) физически сперва передается длина блока данных, потом - сам блок. А нафига ты такое исследование провёл, и так же очевидно было, что так должно было быть... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 11:34 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbДа, у меня 9 версия INDY. авторВ каждом "отправлении" (при вызове метода WriteBuffer) физически сперва передается длина блока данных, потом - сам блок. Вот только функция recv эту длину почему-то не видит, а выдает размер принятого пакета. Мля, ПОТОМУ ЧТО ТЫ ЕГО ЗАДАЁШЬ НА ВХОДЕ recv! ЗАДАВАЙ БОЛЬШЕ! ОНО БУДЕТ ТЕБЕ ВЫДАВАТЬ БОЛЬШЕ! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 11:35 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rb ... И если мне кто-то ещё посмеет возразить, что Pascal, Delphi неисправимо калечат людям мозг, то я просто дам ссылку на этот топик... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 11:38 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
MasterZivSergey_rbДа, у меня 9 версия INDY. пропущено... Вот только функция recv эту длину почему-то не видит, а выдает размер принятого пакета. Мля, ПОТОМУ ЧТО ТЫ ЕГО ЗАДАЁШЬ НА ВХОДЕ recv! ЗАДАВАЙ БОЛЬШЕ! ОНО БУДЕТ ТЕБЕ ВЫДАВАТЬ БОЛЬШЕ! Насколько больше? В два раза достаточно? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 12:09 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
MasterZivSergey_rb ... И если мне кто-то ещё посмеет возразить, что Pascal, Delphi неисправимо калечат людям мозг, то я просто дам ссылку на этот топик... Что доказывает поговорку: авторопытный программист С++ с легкостью может решить проблему, не существующую в Delphi ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 12:14 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
И подтверждает, что опытный программист Дельфи не может решить проблему, возникающую в Дельфи. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 12:26 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovИ подтверждает, что опытный программист Дельфи не может решить проблему, возникающую в Дельфи. К счастью, я не опытный программист Дельфи, и, поэтому, у меня проблем в Дельфи не возникает. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 12:32 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbК счастью, я не опытный программист Дельфи, и, поэтому, у меня проблем в Дельфи не возникает. Тогда зачем ты здесь пытаешься использовать recv() вместо ReadStrings() там? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 12:35 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSergey_rbК счастью, я не опытный программист Дельфи, и, поэтому, у меня проблем в Дельфи не возникает. Тогда зачем ты здесь пытаешься использовать recv() вместо ReadStrings() там? Потому что прога, написанная в Лазарусе, не работает под WinCe7. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 12:48 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rb у меня проблем в Дельфи не возникает. Sergey_rbПотому что прога, написанная в Лазарусе, не работает под WinCe7. Это либо не проблема, либо кто-то совсем не умеет в логику. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 12:52 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSergey_rb у меня проблем в Дельфи не возникает. Sergey_rbПотому что прога, написанная в Лазарусе, не работает под WinCe7. Это либо не проблема, либо кто-то совсем не умеет в логику. А вы в этом профи. Только что-то никто из вас так и не написал функцию, получающую данные из сокета, не закрывая сокета. Развели флуда на 5 страниц. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:01 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
MasterZivSergey_rb ... И если мне кто-то ещё посмеет возразить, что Pascal, Delphi неисправимо калечат людям мозг, то я просто дам ссылку на этот топик... Мне кажется, что ТС просто троллит. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:02 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
КотовасияMasterZivпропущено... И если мне кто-то ещё посмеет возразить, что Pascal, Delphi неисправимо калечат людям мозг, то я просто дам ссылку на этот топик... Мне кажется, что ТС просто троллит. Кого тут троллить? Вижу только раздувание щек от собственной значимости, хотя так никто и не предложил правильного решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:06 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbDimitry Sibiryakovпропущено... пропущено... Это либо не проблема, либо кто-то совсем не умеет в логику. А вы в этом профи. Только что-то никто из вас так и не написал функцию, получающую данные из сокета, не закрывая сокета. Развели флуда на 5 страниц. Что за бред? Я тебе ссылку на описание примеров работы с tcp дал, что ты упираешься в свою indy? Если ты не знаешь формата формируемого тобой сообщения - ты гарантированно не сможешь его принять и обработать. Увольняйся, меняй работу, нанимай программиста, разбирай сам - выбор большой, но само собой ничего не заработает, и вместо тебя никто делать точно не станет ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:11 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
КотовасияSergey_rbпропущено... А вы в этом профи. Только что-то никто из вас так и не написал функцию, получающую данные из сокета, не закрывая сокета. Развели флуда на 5 страниц. Что за бред? Я тебе ссылку на описание примеров работы с tcp дал, что ты упираешься в свою indy? Если ты не знаешь формата формируемого тобой сообщения - ты гарантированно не сможешь его принять и обработать. Увольняйся, меняй работу, нанимай программиста, разбирай сам - выбор большой, но само собой ничего не заработает, и вместо тебя никто делать точно не станет Я уже писал, что вариант с закрытием сокета меня не устраивает. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:15 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbКотовасияпропущено... Что за бред? Я тебе ссылку на описание примеров работы с tcp дал, что ты упираешься в свою indy? Если ты не знаешь формата формируемого тобой сообщения - ты гарантированно не сможешь его принять и обработать. Увольняйся, меняй работу, нанимай программиста, разбирай сам - выбор большой, но само собой ничего не заработает, и вместо тебя никто делать точно не станет Какого еще "закрытия сокета", откуда это? Я уже писал, что вариант с закрытием сокета меня не устраивает. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:16 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rb, Какого еще "закрытия сокета", откуда это? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:17 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbникто из вас так и не написал функцию, получающую данные из сокета, не закрывая сокета. За последние полгода я этих функций написал не менее полудюжины. Большая часть была push-типа, скармливающая принятый кусок конечному автомату, меньшая - pull-типа, читающая из сокета столько байт сколько от неё хотела вышестоящая процедура. И они все работают так, как этого требует логика моего приложения и структура моего протокола передачи. Но что (и зачем) писать для тебя, когда и логика и протокол неизвестны даже тебе самому? В этом топике уже все ответы отвечены, все советы посоветованы. Если ты не в состоянии их понять - это проблема не топика. Голосую: пристрелить. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:19 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Про протокол я тоже писал - это набор строк, заканчивающиеся переводом строки. Несколько байт я тоже могу и отправить и принять. Вопрос в получении более большого объема строк, который разбивается на порции (раз от слова пакет всех почему-то воротит) Все предложенные решения были основаны на проверку закрытии сокета. Меня это решение не устраивает. Задача - принять большой объем данных, не закрывая сокета. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:30 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbникто и не предложил правильного решения. Ок, правильно решение, практически копи-паст из работающей программы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:30 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
В каком случае получается Код: plaintext 1.
При закрытии сокета? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:31 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
В том, который описан в документации по recv(), которую надо читать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:40 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rb, что ты уперся в это закрытие сокета? Из сокета читают по мере надобности, а закрыаается он при дисконнекте (например). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:40 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
КотовасияSergey_rb, что ты уперся в это закрытие сокета? Из сокета читают по мере надобности, а закрыаается он при дисконнекте (например). Потому что неизвестно, на сколько кусков будет разбито входящее сообщение. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:42 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbDimitry Sibiryakovпропущено... Тогда зачем ты здесь пытаешься использовать recv() вместо ReadStrings() там? Потому что прога, написанная в Лазарусе, не работает под WinCe7.Indy в исходниках же идет. Берешь и переводишь построчно с паскаля на С ReadStrings и все остальные функции, от которых она зависит. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:43 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovВ том, который описан в документации по recv(), которую надо читать. Читаем описание авторФункция recv Функция служит для чтения данных из сокета. Прототип: int recv(int s, char * buf, int len, int flags); Первый аргумент - сокет-дескриптор, из которого читаются данные. Второй и третий аргументы - соответственно, адрес и длина буфера для записи читаемых данных. Четвертый параметр - это комбинация битовых флагов, управляющих режимами чтения. Если аргумент flags равен нулю, то считанные данные удаляются из сокета. Если значение flags есть MSG_PEEK, то данные не удаляются и могут быть считаны последущим вызовом ( или вызовами ) recv. Функция возвращает число считанных байтов или -1 в случае ошибки . Следует отметить, что нулевое значение не является ошибкой. Оно сигнализирует об отсутствии записанных в сокет процессом-поставщиком данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:44 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
BarloneSergey_rbпропущено... Потому что прога, написанная в Лазарусе, не работает под WinCe7.Indy в исходниках же идет. Берешь и переводишь построчно с паскаля на С ReadStrings и все остальные функции, от которых она зависит. ReadStrings сначала получает количество строк, потом последовательно их считывает. Recv не понимает этого протокола, и, возвращает только количество байт, в полученном куске данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:48 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
BarloneSergey_rbпропущено... Потому что прога, написанная в Лазарусе, не работает под WinCe7.Indy в исходниках же идет. Берешь и переводишь построчно с паскаля на С ReadStrings и все остальные функции, от которых она зависит. Инди и для си-шарпа вроде как есть, можно попробовать привычные для ТС формочки по-быстрому нашлепать для WinEC 7. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:51 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rb... Recv не понимает этого протокола, и, возвращает только количество байт, в полученном куске данных. Хлопчык, ты книжку - чытав? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:52 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbЧитаем описание Не, ты описание процитировал. А надо читать. Чтобы не задавать глупых вопросов "в каком случае возвращается значение меньше нуля". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 13:55 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbBarloneпропущено... Indy в исходниках же идет. Берешь и переводишь построчно с паскаля на С ReadStrings и все остальные функции, от которых она зависит. ReadStrings сначала получает количество строк, потом последовательно их считывает. Recv не понимает этого протокола, и, возвращает только количество байт, в полученном куске данных.Да, не понимает. Поэтому и надо написать свой аналог ReadStrings. На самом деле, ReadStrings вызывает recv глубоко внутри, в ReadFromStack - IOHandler.Recv это тот самый системный recv (ну почти, небольшой враппер над ним). И recv вызывается внутри ReadStrings гораздо больше одного раза. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:01 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
BarloneSergey_rbпропущено... ReadStrings сначала получает количество строк, потом последовательно их считывает. Recv не понимает этого протокола, и, возвращает только количество байт, в полученном куске данных.Да, не понимает. Поэтому и надо написать свой аналог ReadStrings. На самом деле, ReadStrings вызывает recv глубоко внутри, в ReadFromStack - IOHandler.Recv это тот самый системный recv (ну почти, небольшой враппер над ним). И recv вызывается внутри ReadStrings гораздо больше одного раза. Я уже понял, что аналог ReadStrings мне не написать. Сделал новый сервер, который отправляет ответы через WriteLn. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:06 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSergey_rbЧитаем описание Не, ты описание процитировал. А надо читать. Чтобы не задавать глупых вопросов "в каком случае возвращается значение меньше нуля". авторReturn Value If no error occurs, recv returns the number of bytes received and the buffer pointed to by the buf parameter will contain this data received. If the connection has been gracefully closed, the return value is zero. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError. Error code Meaning WSANOTINITIALISED A successful WSAStartup call must occur before using this function. WSAENETDOWN The network subsystem has failed. WSAEFAULT The buf parameter is not completely contained in a valid part of the user address space. WSAENOTCONN The socket is not connected. WSAEINTR The (blocking) call was canceled through WSACancelBlockingCall. WSAEINPROGRESS A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function. WSAENETRESET For a connection-oriented socket, this error indicates that the connection has been broken due to keep-alive activity that detected a failure while the operation was in progress. For a datagram socket, this error indicates that the time to live has expired. WSAENOTSOCK The descriptor is not a socket. WSAEOPNOTSUPP MSG_OOB was specified, but the socket is not stream-style such as type SOCK_STREAM, OOB data is not supported in the communication domain associated with this socket, or the socket is unidirectional and supports only send operations. WSAESHUTDOWN The socket has been shut down; it is not possible to receive on a socket after shutdown has been invoked with how set to SD_RECEIVE or SD_BOTH. WSAEWOULDBLOCK The socket is marked as nonblocking and the receive operation would block. WSAEMSGSIZE The message was too large to fit into the specified buffer and was truncated. WSAEINVAL The socket has not been bound with bind, or an unknown flag was specified, or MSG_OOB was specified for a socket with SO_OOBINLINE enabled or (for byte stream sockets only) len was zero or negative. WSAECONNABORTED The virtual circuit was terminated due to a time-out or other failure. The application should close the socket as it is no longer usable. WSAETIMEDOUT The connection has been dropped because of a network failure or because the peer system failed to respond. WSAECONNRESET The virtual circuit was reset by the remote side executing a hard or abortive close. The application should close the socket as it is no longer usable. On a UDP-datagram socket, this error would indicate that a previous send operation resulted in an ICMP "Port Unreachable" message. Все они связаны с возникновением ошибок, а не с завершением приема данных ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:11 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbBarloneпропущено... Да, не понимает. Поэтому и надо написать свой аналог ReadStrings. На самом деле, ReadStrings вызывает recv глубоко внутри, в ReadFromStack - IOHandler.Recv это тот самый системный recv (ну почти, небольшой враппер над ним). И recv вызывается внутри ReadStrings гораздо больше одного раза. Я уже понял, что аналог ReadStrings мне не написать. Сделал новый сервер, который отправляет ответы через WriteLn. Почему же ты книжку не посмотришь, там и сервер и клиент без инди, несколько вариантов. Ничего сложного, хоть на паскале хоть на си... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:12 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbВсе они связаны с возникновением ошибок, а не с завершением приема данных И это правильно, потому что завершение приёма данных сигнализируется возвращаемым значением, бОльшим нуля. БОЛЬШИМ! Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:13 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbBarloneпропущено... Да, не понимает. Поэтому и надо написать свой аналог ReadStrings. На самом деле, ReadStrings вызывает recv глубоко внутри, в ReadFromStack - IOHandler.Recv это тот самый системный recv (ну почти, небольшой враппер над ним). И recv вызывается внутри ReadStrings гораздо больше одного раза. Я уже понял, что аналог ReadStrings мне не написать. Сделал новый сервер, который отправляет ответы через WriteLn.О как. И каким образом это решает проблему с определением длины? На самом деле, совсем не обязательно ReadStrings переводить буквально построчно. Надо просто достать из первых четырех байт полученного буфера количество строк. И читать дальше, считая переводы строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:13 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
BarloneSergey_rbпропущено... Я уже понял, что аналог ReadStrings мне не написать. Сделал новый сервер, который отправляет ответы через WriteLn.О как. И каким образом это решает проблему с определением длины? На самом деле, совсем не обязательно ReadStrings переводить буквально построчно. Надо просто достать из первых четырех байт полученного буфера количество строк. И читать дальше, считая переводы строк. Считал я эти 4 байта, в них число 0000 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:19 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSergey_rbВсе они связаны с возникновением ошибок, а не с завершением приема данных И это правильно, потому что завершение приёма данных сигнализируется возвращаемым значением, бОльшим нуля. БОЛЬШИМ! А выход из цикла происходит при значении меньше нуля. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:20 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
BarloneSergey_rbпропущено... Я уже понял, что аналог ReadStrings мне не написать. Сделал новый сервер, который отправляет ответы через WriteLn.О как. И каким образом это решает проблему с определением длины? На самом деле, совсем не обязательно ReadStrings переводить буквально построчно. Надо просто достать из первых четырех байт полученного буфера количество строк. И читать дальше, считая переводы строк. Ну так он и первые 4 байта точно так же по частям может принимать, и всё - смерть, разруха, разочарование и т.п. Он не знает, как данные собирать. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:21 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
КотовасияSergey_rbпропущено... Я уже понял, что аналог ReadStrings мне не написать. Сделал новый сервер, который отправляет ответы через WriteLn. Почему же ты книжку не посмотришь, там и сервер и клиент без инди, несколько вариантов. Ничего сложного, хоть на паскале хоть на си... Книжка неправильная, в ней написано, что TCP протокол передает данные пакетами, но мне здесь упорно пытаются доказать, что это не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:22 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rb, почему ты книжку почитать не хочешь? Тебе личное общение нравится? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:22 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbА выход из цикла происходит при значении меньше нуля. "Пони бегает по кругу и в уме круги считает..." (с) Именно поэтому в приведённом мною ПРАВИЛЬНОМ коде обработка данных производится ВНУТРИ цикла. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:23 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbКотовасияпропущено... Почему же ты книжку не посмотришь, там и сервер и клиент без инди, несколько вариантов. Ничего сложного, хоть на паскале хоть на си... Книжка неправильная, в ней написано, что TCP протокол передает данные пакетами, но мне здесь упорно пытаются доказать, что это не так. Ты или лживый тролль, или совсем уж тупой. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:23 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbBarloneпропущено... О как. И каким образом это решает проблему с определением длины? На самом деле, совсем не обязательно ReadStrings переводить буквально построчно. Надо просто достать из первых четырех байт полученного буфера количество строк. И читать дальше, считая переводы строк. Считал я эти 4 байта, в них число 0000Серьезно? Тут уже просили дамп полученного пакета в студию. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:26 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
КотовасияSergey_rbпропущено... Книжка неправильная, в ней написано, что TCP протокол передает данные пакетами, но мне здесь упорно пытаются доказать, что это не так. Ты или лживый тролль, или совсем уж тупой. Выдержка из книги авторТо, что TCP склеивает данные в один поток, не всегда удобно. Во многих случаях пакеты, приходящие по сети, обрабатываются отдельно, поэтому читать их из буфера желательно тоже по одному. Это просто сделать, если все пакеты имеют одинаковую длину. Но при различной длине пакетов принимающая сторона заранее не знает, сколько байтов нужно прочитать из буфера, чтобы получить ровно один пакет и ни байта больше. Чтобы обойти эту ситуацию, в пакете можно предусмотреть обязательный заголовок фиксированной длины, одно из полей которого хранит длину пакета. В этом случае принимающая сторона может читать пакет по частям: сначала заголовок известной длины, а потом тело пакета, размер которого стал известен благодаря заголовку. Другой способ разделения пакетов - вставка между ними заранее оговоренной последовательности байтов, которая не может появиться внутри пакета. Но самое неудобное то, что пакеты не только склеиваются, но и разбиваются на части. Принимающая сторона может получить пакет меньшего размера, чем отправленный, если этот пакет был послан по частям, и на момент его чтения принимающей стороной еще не все части были получены. Тогда приходится повторять операцию чтения данных, пока не будет получено все, что нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:29 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbВыдержка из книги И какое место из этой выдержки ты прочитал как "TCP протокол передает данные пакетами"? Только не говори, что это "TCP склеивает данные в один поток". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:33 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Читаем дальше Функция, которая читает из сокета Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73.
Обратим внимание на заголовок Код: plaintext 1.
В функцию надо передать количество байт, которое должно быть считано. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:39 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbЧитаем дальше Зачем ты хочешь чтобы мы читали этот букварь? Так всё написано правильно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:50 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbКотовасияпропущено... Ты или лживый тролль, или совсем уж тупой. Выдержка из книги автор... Но самое неудобное то, что пакеты не только склеиваются, но и разбиваются на части. Принимающая сторона может получить пакет меньшего размера, чем отправленный, если этот пакет был послан по частям, и на момент его чтения принимающей стороной еще не все части были получены. Тогда приходится повторять операцию чтения данных, пока не будет получено все, что нужно. И какой же вывод? А вывод такой, что до внутренней организации тебе дела никакого нет. Ты принимаешь данные по мере их поступления, порциями произвольной, не зависящей от тебя длины. ТАК СДЕЛАНО потому что, тут нет место твоим желаниям и страданиям. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 14:53 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbКотовасияпропущено... Мне кажется, что ТС просто троллит. Кого тут троллить? Вижу только раздувание щек от собственной значимости, хотя так никто и не предложил правильного решения. Ты сообщаешь только то считаешь нужным сообщить, извини, но телепатов тут нет чтобы угадать недостающее. Уже 100500 раз назвали все возможные источники твоей проблемы, а ты вместо того чтобы давать уточнения продолжаешь нести пургу. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 15:02 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dima TSergey_rbпропущено... Кого тут троллить? Вижу только раздувание щек от собственной значимости, хотя так никто и не предложил правильного решения. Ты сообщаешь только то считаешь нужным сообщить, извини, но телепатов тут нет чтобы угадать недостающее. Уже 100500 раз назвали все возможные источники твоей проблемы, а ты вместо того чтобы давать уточнения продолжаешь нести пургу. Я выложил дампы для анализа. Где результат этого анализа? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 15:09 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbDima Tпропущено... Ты сообщаешь только то считаешь нужным сообщить, извини, но телепатов тут нет чтобы угадать недостающее. Уже 100500 раз назвали все возможные источники твоей проблемы, а ты вместо того чтобы давать уточнения продолжаешь нести пургу. Я выложил дампы для анализа. Где результат этого анализа? Где выложил? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 15:12 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbDima Tпропущено... Ты сообщаешь только то считаешь нужным сообщить, извини, но телепатов тут нет чтобы угадать недостающее. Уже 100500 раз назвали все возможные источники твоей проблемы, а ты вместо того чтобы давать уточнения продолжаешь нести пургу. Я выложил дампы для анализа. Где результат этого анализа? Ты не выкладывал. Ошибся форумом? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 15:14 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Если под дампом ты понимаешь это Sergey_rbВот это более правильное сообщение, заканчивается двумя переводами строки Код: plaintext 1. 2. 3. 4. 5. 6. 7.
то где там 4 байта о которых ты писал Sergey_rbСчитал я эти 4 байта, в них число 0000 В общем это не дамп, а недоразумение. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 15:18 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Dima TSergey_rbпропущено... Я выложил дампы для анализа. Где результат этого анализа? Где выложил? На предыдущей странице. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 15:22 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbНа предыдущей странице. Нет там ничего. Удачи в поисках решения. Желание помочь было, но ты его напрочь отбил своим упорством. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 15:25 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbКотовасияпропущено... Почему же ты книжку не посмотришь, там и сервер и клиент без инди, несколько вариантов. Ничего сложного, хоть на паскале хоть на си... Книжка неправильная, в ней написано, что TCP протокол передает данные пакетами, но мне здесь упорно пытаются доказать, что это не так. Мне учитель школьной физики говорил что свет - это элекромагнитные волны. А другой учитель универа - что фотоны. Даже не знаю что с этим делать. Как думаешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 21:46 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rb, 5 страниц флуда... Отвечая на твой вопрос в первом сообщении ветки: чтобы организовать неблокирующее чтение в цикле из сокета надо почитать про функцию select, позволяющую организовать мониторинг нескольких сокетов по разным событиям - включая объем готовых для чтения байт в буфере, тогда recv не завершиться блокировкой. Дальше складирование прочитанного в буфер и анализ его - полное сообщение(строка, фикс длина, маркеры - это уж как протокол устроен) пришло или нет. И дальше ожидание проверка необходимости выхода из цикла, или разбор событий винды или что там еще тебе нужно в не заблокированном цикле, например выход из него. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 23:26 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbDimitry SibiryakovВ том, который описан в документации по recv(), которую надо читать. Читаем описание авторФункция recv Функция служит для чтения данных из сокета. Прототип: int recv(int s, char * buf, int len, int flags); Первый аргумент - сокет-дескриптор, из которого читаются данные. Второй и третий аргументы - соответственно, адрес и длина буфера для записи читаемых данных. Четвертый параметр - это комбинация битовых флагов, управляющих режимами чтения. Если аргумент flags равен нулю, то считанные данные удаляются из сокета. Если значение flags есть MSG_PEEK, то данные не удаляются и могут быть считаны последущим вызовом ( или вызовами ) recv. Функция возвращает число считанных байтов или -1 в случае ошибки . Следует отметить, что нулевое значение не является ошибкой. Оно сигнализирует об отсутствии записанных в сокет процессом-поставщиком данных. Это ты плохое описание нашёл. Там не только -1 возвращается, но и другие отрицательные величины тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 23:47 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbКотовасияпропущено... Почему же ты книжку не посмотришь, там и сервер и клиент без инди, несколько вариантов. Ничего сложного, хоть на паскале хоть на си... Книжка неправильная, в ней написано, что TCP протокол передает данные пакетами, но мне здесь упорно пытаются доказать, что это не так. Блин, сколько ж можно как баран твердить про пакеты? Нет пакетов в TCP/IP. НЕТУ ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 23:50 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Sergey_rbКотовасияпропущено... Ты или лживый тролль, или совсем уж тупой. Выдержка из книги авторТо, что TCP склеивает данные в один поток, не всегда удобно. Во многих случаях пакеты, приходящие по сети, обрабатываются отдельно, поэтому читать их из буфера желательно тоже по одному. Это просто сделать, если все пакеты имеют одинаковую длину. Но при различной длине пакетов принимающая сторона заранее не знает, сколько байтов нужно прочитать из буфера, чтобы получить ровно один пакет и ни байта больше. Чтобы обойти эту ситуацию, в пакете можно предусмотреть обязательный заголовок фиксированной длины, одно из полей которого хранит длину пакета. В этом случае принимающая сторона может читать пакет по частям: сначала заголовок известной длины, а потом тело пакета, размер которого стал известен благодаря заголовку. Другой способ разделения пакетов - вставка между ними заранее оговоренной последовательности байтов, которая не может появиться внутри пакета. Но самое неудобное то, что пакеты не только склеиваются, но и разбиваются на части. Принимающая сторона может получить пакет меньшего размера, чем отправленный, если этот пакет был послан по частям, и на момент его чтения принимающей стороной еще не все части были получены. Тогда приходится повторять операцию чтения данных, пока не будет получено все, что нужно. И какую ж макулатуру ты тут цитируешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 23:51 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
MasterZiv... Это ты плохое описание нашёл. Там не только -1 возвращается, но и другие отрицательные величины тоже. Ну он после еще нашел: 21692641 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 23:51 |
|
recv выход из цикла
|
|||
---|---|---|---|
#18+
Igor BarchenkoSergey_rb, 5 страниц флуда... Отвечая на твой вопрос в первом сообщении ветки: чтобы организовать неблокирующее чтение в цикле из сокета надо почитать про функцию select, позволяющую организовать мониторинг нескольких сокетов по разным событиям - включая объем готовых для чтения байт в буфере, тогда recv не завершиться блокировкой. Дальше складирование прочитанного в буфер и анализ его - полное сообщение(строка, фикс длина, маркеры - это уж как протокол устроен) пришло или нет. И дальше ожидание проверка необходимости выхода из цикла, или разбор событий винды или что там еще тебе нужно в не заблокированном цикле, например выход из него. Ну и что, всё равно ему придётся складывать последовательные прочитанные куски в одно большое целое и частями обрабатывать. ВНУТРИ ЦИКЛА ВЫБОРКИ. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2018, 23:55 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017750]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
146ms |
get tp. blocked users: |
1ms |
others: | 267ms |
total: | 489ms |
0 / 0 |