Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.08.2012, 03:03
eXeC0D3 eXeC0D3 вне форума
Прохожий
 
Регистрация: 29.11.2008
Сообщения: 29
Репутация: 10
Печаль [Help] Посылаем большой текст TClientSocket/TServerSocket

посылаю большой текст с клиента к серверу..

Код:
clientsocket1.socket.sendtext('DATA#' + memo1.text);

размер текста 60 кб.
текст принемается обычным способом но не полностю..

пробовал посылать частично..

Код:
var
 s,buf: string;
 i,max : integer;
begin
 s := memo1.text;
 max := Round(Length(s) / 2056) + 1; // 2056 = 2kb
 for i := 1 to max do
  begin
   buf := 'DATA#' + copy(s,1,2056);
   delete(s,1,length(buf));
   clientsocket1.socket.sendtext(buf);
  end;
end;


Код:
var
 s : string;
begin
 s:= socket.receivetext;
 if copy(s,1,length('data#')) = 'data#' then
  memo1.lines.add(s);
end;


тож самое.. не полностю..

заранее спосибо за помощ.

простите за грамотические ошибки.
Ответить с цитированием
  #2  
Старый 20.08.2012, 07:33
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Переведи в массив байт, проверь.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 20.08.2012, 09:11
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

потому что твой текст размером 60Кб разбивается на пакеты, к примеру по 8Кб. а у тебя добавляется только первый пакет:
Код:
if copy(s,1,length('data#')) = 'data#' then memo1.lines.add(s);
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 20.08.2012, 09:41
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Заведи флаги, "начало потока" и "конец потока".
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 20.08.2012, 09:49
mss mss вне форума
Новичок
 
Регистрация: 29.10.2010
Сообщения: 50
Репутация: 10
По умолчанию

Потому что отправляются только первые 8кб, остальные 52 кб по твоей вине коту под хвост.
Ответить с цитированием
  #6  
Старый 20.08.2012, 09:56
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Во-первых ты когда отправляешь текст, то добавляешь слово 'DATA' большими буквами:
Код:
   buf := 'DATA#' + copy(s,1,2056);
А когда принимаешь, то сравниваешь со словом 'data' маленькими буквами:
Код:
 if copy(s,1,length('data#')) = 'data#' then
  memo1.lines.add(s);
Объясни.

Во-вторых в этом коде:
Код:
   buf := 'DATA#' + copy(s,1,2056);
   delete(s,1,length(buf));
Ты удаляешь из строки s на 5 символов больше чем нужно.

Ну и замечание по поводу строки:
Код:
max := Round(Length(s) / 2056) + 1; // 2056 = 2kb
Это не правильно, у тебя часто будет посылаться лишний пакет (например при длине 2000 отправится 2 пакета вместо одного). Делай лучше так:
Код:
max := (Length(s) + 2055) div 2056; // 2056 = 2kb
Ну и конечно у тебя отправится больше чем 2056, за счёт добавления слова 'DATA#'

И какая у тебя версия Delphi?
Ответить с цитированием
  #7  
Старый 20.08.2012, 19:38
eXeC0D3 eXeC0D3 вне форума
Прохожий
 
Регистрация: 29.11.2008
Сообщения: 29
Репутация: 10
По умолчанию

poli-smen
я ето на прямую тут написал, не копировал и поетому такие ошибки.. ети ошибки всё сделано

Цитата:
И какая у тебя версия Delphi?
XE2

mss
знаю и поетому и отправляю по 2 кб..


Цитата:
потому что твой текст размером 60Кб разбивается на пакеты, к примеру по 8Кб. а у тебя добавляется только первый пакет:

знаю и поетому и отправляю по 2 кб..
но.. в етом примере не должно работать?

Код:
var
 s : string;
begin
 s:= socket.receivetext;
 if copy(s,1,length('data#')) = 'DATA#' then
  memo1.lines.add(s);
end;
Ответить с цитированием
  #8  
Старый 20.08.2012, 20:11
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Цитата:
Сообщение от eXeC0D3
но.. в етом примере не должно работать?
В этом примере должно работать, но не так, как ты хочешь.
Просто перечитай внимательно посты выше, там все объяснили.
Если ты думаешь, что текст не полностью принимается, напиши так:
Код:
  s:= socket.receivetext;
  if(Length(s) <> 0) then
    memo1.lines.add(s);
__________________
Помогаю за Спасибо

Последний раз редактировалось v1s2222, 20.08.2012 в 20:14.
Ответить с цитированием
  #9  
Старый 23.08.2012, 21:15
mss mss вне форума
Новичок
 
Регистрация: 29.10.2010
Сообщения: 50
Репутация: 10
По умолчанию

> знаю и поетому и отправляю по 2 кб..

ГДЕ ты отправляешь по 2 кб ?
Ни малейшего намека в твоем коде на это !
Ответить с цитированием
  #10  
Старый 24.08.2012, 08:26
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

значится еще раз:
проблема не в отправке, проблема в приеме!
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter