|
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 26
|
||||||||||||||||
Передача больших сообщений22.11.2014, 03:13. Показов 2696. Ответов 28
Метки нет (Все метки)
Проблема состоит в том что сервер принимает структуру в структуре есть поле char a[20][97]; оно передается нормально некоторое время, а потом передается черте что. Поле на клиенте не изменяю оно статично(для проверки делал) в чем может быть проблема
Передаю я сообщение 2 кб....
0
|
||||||||||||||||
| 22.11.2014, 03:13 | |
|
Ответы с готовыми решениями:
28
Передача сообщений между клиентами Передача больших файлов по TCP |
|
Native x86
6856 / 3789 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
|
|
| 22.11.2014, 03:24 | |
|
Fueled9456, хоть и на примере Delphi, но касается всех: О правильном использовании TServerSocket/TClientSocked и подобными компонентами (у вас скорее всего проблема, описанная в пунктах 2, 3 ,4).
0
|
|
|
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 26
|
|
| 22.11.2014, 12:30 [ТС] | |
|
Эти проблемы должны решать 7 уровней модели OSI. К сабжу у меня 2 клиента обслуживаються в одном потоке!
0
|
|
|
Native x86
6856 / 3789 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
|
|||
| 22.11.2014, 22:25 | |||
|
1
|
|||
|
И целого heap'а мало
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
|
|
| 24.11.2014, 18:10 | |
|
Fueled9456, ты попечатай размер посылаемой структуры и сколько recv приняла. И погоняй. Циферки сойдуться?
1
|
|
|
3 / 3 / 3
Регистрация: 28.03.2013
Сообщений: 45
|
|
| 27.11.2014, 22:54 | |
|
Fueled9456, поставь задержку в 200мс перед каждой отправкой. если будет нормально можно немного уменьшить.
0
|
|
| 29.11.2014, 09:57 | |||||||
|
Передавай пакеты размером не больше MTU.
Ну еще один момент, почувствуй разницу, структуры абсолютно одинаковые в плане описания, но размер их разный.
0
|
|||||||
|
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 26
|
|
| 30.11.2014, 16:15 [ТС] | |
|
по другому ни как я не смогу передавать сообщения без потери? а как определить что сообщение целое при приеме
0
|
|
| 30.11.2014, 16:20 | |
|
0
|
|
|
Ушел с форума
|
||
| 01.12.2014, 01:37 | ||
|
либо равное размеру принимающего буфера. Сколько именно байт будет принято - неизвестно, любые предположения относительно этого количества - ошибочны. Если вы обмениваетесь данными по определенному протоколу, построенному поверх TCP, например HTTP, и знаете, что конец сообщения еще не достигнут, зовите recv еще и еще, пока все ожидаемые данные не будут приняты. Данные никуда не потерялись, вы просто их еще не прочитали. Точно также можно файл читать большими кусками, а можно по одному байту. При правильном программировании на логический результат это не повлияет. quwy и Andrej выше все по делу написали. TCP - это просто поток данных, и работать с ним нужно, как с потоком, а не как с набором сообщений или пакетов.
0
|
||
| 01.12.2014, 05:16 | ||
|
0
|
||
|
3 / 3 / 3
Регистрация: 28.03.2013
Сообщений: 45
|
|
| 01.12.2014, 10:32 | |
|
То что TCP это поток данных это правильно и то что гарантирует доставку тоже правильно. НО если ты будешь несколько подрят отправлять сообщение допустим три раза. то ты можешь получить не три сообщения а два. У тебя в первом сообщение будет налеплено и первое и второе отправленное сообщение, а во втором третье отправленное сообщение. А может что в первом принятом получишь первое отправленное, а во втором третье отправленное. Дело в том что данные у тебя не успевают отсылатся как ты уже новые пытаешься отослать. Вот то что не успело отослатся затирается новыми данными. И вообще данные что отослал они приходят не сразу одной отправкой. Если отправляешь большой файл то он частями отправляет данные.
0
|
|
|
Ушел с форума
|
|||||
| 01.12.2014, 12:00 | |||||
|
Или это не TCP вообще никакой.
0
|
|||||
|
3 / 3 / 3
Регистрация: 28.03.2013
Сообщений: 45
|
||
| 01.12.2014, 12:30 | ||
0
|
||
|
Ушел с форума
|
||||||
| 01.12.2014, 13:51 | ||||||
|
Это противоречит концепции TCP-стека, в частности, это нарушает гарантию порядка доставки, и не только. Очередь TCP - она на то и очередь, чтобы отправлять данные последовательно, один за другим, чтобы они прибыли в пункт назначения в точности в таком же составе и порядке. Если эта схема доставки нарушается, тогда одно из трех: либо аппаратная ошибка где-нибудь на линии (такое бывает, но очень-очень редко, один случай на миллиарды), либо это вообще не протокол TCP, либо реализация клиент-сервера некорректная. Я склоняюсь к третьему варианту. Вот выдержки из спецификации TCP (RFC 793), ключевые моменты выделены жирным: https://www.ietf.org/rfc/rfc793.txt
0
|
||||||
|
3 / 3 / 3
Регистрация: 28.03.2013
Сообщений: 45
|
|||||||||||||||||
| 01.12.2014, 15:02 | |||||||||||||||||
|
Мой кусок кода сервера.
kyrs4ServerDlg.cpp
Добавлено через 19 минут Кстати забыл добавить что тут:
0
|
|||||||||||||||||
|
Ушел с форума
|
||
| 01.12.2014, 15:07 | ||
|
Приведите минимальный код, воспроизводящий проблему.
Чтобы его можно было вставить в Visual Studio и скомпилировать. Добавлено через 1 минуту А этого разве недостаточно для объяснения:
0
|
||
|
3 / 3 / 3
Регистрация: 28.03.2013
Сообщений: 45
|
||
| 01.12.2014, 15:47 | ||
Пока исходный код на файловый обменник вылаживается. Подумай сам. Если ты говоришь что все становится в очереть, то где это все хранится? В оперативной памяти. А теперь представь что нужно отослать не 10Мб, а 20Гб фильма. И все это будет хранится в оперативной памяти, пока не передастся. Я думаю компьютер ляжет от этого если у него оператива меньше будет. Добавлено через 9 минут А вот и проект http://file.sampo.ru/7kwrwv/ Запускай файлы на разных ПК, естественно с подключением Ethernet
0
|
||
|
Ушел с форума
|
||||
| 01.12.2014, 16:28 | ||||
|
И еще какую-нибудь толковую литературу по TCP, например Таненбаума, Стивенсона или Снейдера. Там все это описано. Для TCP-компонентов не имеет значения то, что где-то внизу летают, перемешиваются, дублируются и отбрасываются пакеты и сегменты, они видят лишь поток данных в обоих направлениях. Гугл -> TCP sliding window. TCP не будет ставить в очередь 20ГБ, если на той стороне не готовы принять столько данных. Send просто заблокируется, пока очередь не будет достаточно разгружена, и все. Можно написать простой тест: клиент непрерывно шлет данные большими кусками, без задержек, сервер делает recv в цикле по одному байту и с длительными паузами. Если правильно все сделать, ни одного байта потеряно не будет, и никакой перегрузки оперативки на отправляющей стороне тоже не возникнет. Добавлено через 21 секунду
0
|
||||
|
3 / 3 / 3
Регистрация: 28.03.2013
Сообщений: 45
|
|||||||
| 01.12.2014, 18:41 | |||||||
0
|
|||||||
| 01.12.2014, 18:41 | |
|
Помогаю со студенческими работами здесь
20
Передача больших объемов информации по TCP Передача координат транспорта в виде коротких сообщений Конструкторы,передача сообщений объектам и реакции объектов на сообщения в С++ Нужна форма отправки сообщений с сайта с прикреплением больших и нескольких файлов Передача сообщений по интернету Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|