|
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 |
|
|
start [/forum/topic.php?fid=57&msg=39711686&tid=2017750]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 145ms |
0 / 0 |