Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2009.05.31;
Скачать: [xml.tar.bz2];

Вниз

Определение размера отправленых данных через TSocket   Найти похожие ветки 

 
Del   (2008-02-07 21:35) [0]

Доброе время суток. Столкнулся со слдующей проблемой.
Есть программа, которая организовывает передачу фалов по сети. Собственно -чат, с доп. функцией передачи. Сама передача работает на ура, однако возникает проблема с отображением размера передаваемого файла.
На стороне клиента проресс принятого файла выводится через стандартный компонент ProgressBar, а также в поле Edit.
Возникает вопрос - как отобразить колличество отправленной на данный момент информации на стороне сервера.
Собственно попытался снять показания progressbar`a на стороне клиента и передать их на сервер (варварский способ, конечно, а что делать?:() следующим путём:
На первый принятый байт у клиента включается таймер (пережиток попытки отправлять прогресс по времени), далее следующий код:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=false;
If ProgressBAr1.Position>1 Then begin
ClientSocket3.Socket.SendText(IntToStr(ProgressBar1.Position));
end else ClientSocket3.Socket.SendText("0");
end;

procedure TForm1.ServerSocket3ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Edit1.Text:="";
Edit1.Text:=Socket.ReceiveText;
Socket.SendText("ok");
end;

procedure TForm1.ClientSocket3Read(Sender: TObject;
 Socket: TCustomWinSocket);
begin
         If Socket.ReceiveText="ok" Then
Begin If ProgressBar1.Position<100 Then
Socket.SendText(IntToStr(ProgressBar1.Position)); end;
end;


Так вот. В поле Edit1 всё попадает путём... НО!
после второй посылочки начинает писать вместо 2, потом 3, потом 4 и т.д. 2, 23, 234, 345, 3445 и в таком духе.
Возникает впечатление, что Сокет не успевает очистить полученную информацию из своего буфера и шлёпает её подряд. Ставил паузы. Долгие. Не помогает.
Прошу помочь. Если не трудно.


 
Slym ©   (2008-02-08 04:41) [1]

пакеты слепляет это нормально...
никаких "пауз"! Протокол на таймаутах работать нормально не может... Вводи в протокол разделитель - например перевод строки...
и вообще протокал в студию... и если его нет - горе тебе т.к. ReceiveText работает до поры до времени, а патом огребешь


 
Slym ©   (2008-02-08 04:43) [2]

и что тебе мешает сделать на сервере тоже самое что и на клиенте?
принципиальной разницы нет...


 
Slym ©   (2008-02-08 04:45) [3]

И вообще хотя бы по этому сайту поискал - примеры тут есть например http://delphimaster.net/view/6-1202118907/


 
ketmar ©   (2008-02-08 05:14) [4]

да это всё фигня, круто замешаная на непонимании работы TCP. смысл распинаться? автору читать надо. много и вдумчиво.

---
Understanding is not required. Only obedience.


 
Del   (2008-02-13 00:49) [5]


> да это всё фигня, круто замешаная на непонимании работы
> TCP. смысл распинаться? автору читать надо. много и вдумчиво.
>

Да знаю я как работают сетевые протоколы. Я не знаю, как с ними в Дельфи работать. А если на все вопросы отсылать читать, то зачем форум тогда вообще? Если перерыть всю литературу, то найти можно всё.

> И вообще хотя бы по этому сайту поискал - примеры тут есть
> например http://delphimaster.net/view/6-1202118907/

Там  немного другая проблема, есл ипочитать поподробней.

Спасибо за содержательные ответы.


 
Anatoly Podgoretsky ©   (2008-02-13 00:52) [6]

> Del  (13.02.2008 00:49:05)  [5]

Вот когда не найдешь, вот тогда на форум.
Форум не является справочником.


 
Slym ©   (2008-02-13 04:33) [7]

Del   (13.02.08 0:49) [5]
Там  немного другая проблема, есл ипочитать поподробней.

Проблема аналогичная твоей: нет правлильного протокола...
ориентация протокола (в твоем случае) на то что один SendText вызовет один ReceiveText ошибочна!

протокол должен иметь заголовок:
1. быть с фиксированным по размеру заголовком
2. быть с динамическим размером, но с фиксированным по размеру предзаголовком с указанием длинны загаловка...
3. быть с динамическим размером, но со внятным разделителем в конце...
То же самое относится к "целевым" данным... либо указание длинны в заголовке, либо внятный разделитель  - который не встретится в теле сообщения, а при наличии бинарных данных это имеет определенную сложность


 
Del   (2008-02-13 20:51) [8]

Спасибо, теперь понятнее. Будем посмотреть, будем порешать.


 
DiamondShark ©   (2008-02-19 16:17) [9]


> Del   (13.02.08 20:51) [8]

А зачем тогда врал: "Да знаю я как работают сетевые протоколы"?

Вот из-за таких халявщиков, как ты, и пропадает желание отвечать на всякий чих.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2009.05.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.013 c
8-1194545729
NaRuTo
2007-11-08 21:15
2009.05.31
Как сделать так чтобы моя диаграмма скакала под бит музыки.


2-1239866502
vanwan
2009-04-16 11:21
2009.05.31
TListBox + TButton


3-1221766047
Девушка
2008-09-18 23:27
2009.05.31
Fib+ ClientDataSet + MasterDetail = Key Violation


2-1239804244
Xoluay
2009-04-15 18:04
2009.05.31
символьный массив


15-1238071462
Артур Пирожков
2009-03-26 15:44
2009.05.31
Западные интернет-магазины. Есть опыт покупок?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский