![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 05.04.2010
Сообщений: 273
|
![]()
Доброго времени суток.
Отправляю строку размером в 65536 символов(прямо перед отправкой вывожу в tmemo length(sign_db[LP_i]) чтобы проверить что я наверняка передаю то что нужно и в целом виде, выдает как надо 65536): Socket.SendText(sign_db[LP_i]); Передача происходит от сервера к клиенту, клиент получает строку в которой только 3455 символов: LP_rec:=Socket.ReceiveText; Length(LP_rec) выводит 3455. Содержимое изначальной строки(65536 символов) в прикрепленном txt файле(это кусок дампа памяти некоего процесса). Собственно суть вопроса - в чем может быть причина обрезки строки? Заранее спасибо за ответ. http://rghost.ru/22730521 |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
А ничего, что это не текст, а двоичные данные?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 05.04.2010
Сообщений: 273
|
![]() |
![]() |
![]() |
![]() |
#4 |
фонатик DELPHI
Форумчанин
Регистрация: 14.01.2008
Сообщений: 714
|
![]()
1. Через сокеты строки передавать не рекомендуется
2. рекомендую следующий алгоритм - определить дамп памяти - принять, что первые 6 байта передачи заголовок например 2 байта - сигнатура и 4 байта длина посылки - отправлять строку дампом. ------------------ По сути, через приходит вся строка. Но на входе, не возможно определить её длину поэтому система и обрезает посылку. Код:
Код:
Потом принимаете число байт равное SEND.length ---- Если потеря будет имметь место, попробуйте передать вашу посылку по частям , менее 64 кБ с попакетным раздроблением и сборкой.
95% сбоев и ошибок приложений, находится в полу метрах от монитора
![]() |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 05.04.2010
Сообщений: 273
|
![]()
Хм, оригинально... Даже не знал что в сокетах есть такая абсурдная недоработка, а откуда вообще берется число полученных байт? Какой бы текст я не передавал получателю доходит только 3472 байта, почему именно 3472?
|
![]() |
![]() |
![]() |
#6 | |
фонатик DELPHI
Форумчанин
Регистрация: 14.01.2008
Сообщений: 714
|
![]() Цитата:
95% сбоев и ошибок приложений, находится в полу метрах от монитора
![]() |
|
![]() |
![]() |
![]() |
#7 | |
Заблокирован
Регистрация: 27.05.2010
Сообщений: 1,099
|
![]() Цитата:
Справку и документацию читать надо, а не пенять на кривизну сокетов В ней черным по белому написано: function SendText(const S: string): Integer; // function !!!!!!!!!!!!!!!!!!!!!! SendText returns the number of bytes sent. Note that this may be less than the length of the string S if the socket is nonblocking. |
|
![]() |
![]() |
![]() |
#8 |
Я не простой
Пользователь
Регистрация: 29.09.2011
Сообщений: 77
|
![]()
За раз можно отправлять пакет длиной не более 65500 байт.
Знание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нем сведения
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка 200 при отправке данных | )Игнат( | Работа с сетью в Delphi | 2 | 15.06.2011 19:43 |
Потеря данных при записи в Named Pipe (именованный канал) | zvukoper | Win Api | 0 | 27.02.2011 20:02 |
Ошибка при отправке сообщений через SMTPClient | BoT_T | Работа с сетью в Delphi | 6 | 26.09.2010 17:16 |
ComboBox проблема при отправке данных | record222 | Общие вопросы Delphi | 1 | 31.03.2010 16:26 |
Потеря данных при изменении рамера раздела | Drandulet | Софт | 5 | 06.07.2008 07:52 |