|
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 |
|
|
start [/forum/topic.php?fid=57&msg=39711007&tid=2017750]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 250ms |
total: | 389ms |
0 / 0 |