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

Вниз

Теряються данные, как исправить?   Найти похожие ветки 

 
pavia   (2004-08-23 00:22) [0]

Есть две программы клиент и сервер.Сервер по запросу передает размер следующего пакета данных и сам пакет.Клиент посылает запрос и принемает данные,НО иногда данные теряються.
//сервер
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
VAR P:POINTER;
begin
with AThread.Connection do
 begin
 ReadBuffer(BUF,SIZEOF(BUF));
 case  BUF[1] of
 0  :BUF[1]:=100;
 200:begin
     WriteBuffer(streaminfo,sizeof(streaminfo));
     BUF[1]:=500;
     end;
 210:begin
     WriteBuffer(srcfmt^,sizeof(TBITMAPINFOHEADER));
     BUF[1]:=510;
     end;
 220:begin
     buf[1]:=l1;//Размер данных в srcdata^
     WriteBuffer(buf,sizeof(buf));
     WriteBuffer(srcdata^,l1);
     BUF[1]:=520;
     end;
 end;
 WriteBuffer(BUF,SIZEOF(BUF));

 end;
end;

//клиент в таймере
 with IdTCPClient1 do
 begin
 Connect;
 try
 buf[1]:=220;
 WriteBuffer(buf,sizeof(buf));
 ReadBuffer(buf,sizeof(buf));
 if srcdata<>nil then freemem(srcdata);
 if buf[1]<>0 then  begin
    getmem(srcdata,buf[1]);
    ReadBuffer(srcdata^,buf[1]);//Здесь виснет,но не всегда.
 end;
 IdTCPClient1.RecvBufferSize:=16;
 ReadBuffer(buf,sizeof(buf));
 finally
 IdTCPClient1.RecvBufferSize:=16;
 Disconnect;
 end;
 end;

Кто знает где ошибка?Или как обойти зависание, когда нет данных?
Буду признателен за любую помощь.


 
Piter ©   (2004-08-23 03:52) [1]

Так вопросы не задаются... оттрасируй программу, посмотри значения переменных. А потом грамотно сформулируй вопрос и приведи именно проблемное узкое место, а не такой листинг...


 
Erik1   (2004-08-23 10:51) [2]

Посмотри пример для Indy там есть работа с ICP сервером.


 
pavia   (2004-08-23 12:15) [3]


> Так вопросы не задаются... оттрасируй программу, посмотри
> значения переменных. А потом грамотно сформулируй вопрос
> и приведи именно проблемное узкое место, а не такой листинг...

Поожолуйста могу у горотить листинг.А проблемное место выделеть.
//сервер
    buf[1]:=l1;//Размер данных в srcdata^
    WriteBuffer(buf,sizeof(buf));
    WriteBuffer(srcdata^,l1);
    BUF[1]:=520;

//Клиент в таймере
ReadBuffer(buf,sizeof(buf));
if srcdata<>nil then freemem(srcdata);
if buf[1]<>0 then  begin
   getmem(srcdata,buf[1]);
   ReadBuffer(srcdata^,buf[1]);//Здесь виснет,но не всегда.
end;


 
Digitman ©   (2004-08-23 13:19) [4]


> pavia   (23.08.04 12:15) [3]


> //Здесь виснет,но не всегда.


и правильно "виснет" - режим гнезда-то блокирующий !

до тех пор пока со стороны передатчика не придут все данные, которые ты запросил в ReadBuffer(), ф-ция эта не вернет управления следующему за ней оператору


 
atruhin ©   (2004-08-23 13:23) [5]

На сервере ты сначала пишешь данные потом размер буфера, а на клиенте читаешь в обратном порядке. Это как минимум, а вот это вообще то галиматья какая то написана:
 IdTCPClient1.RecvBufferSize:=16;
ReadBuffer(buf,sizeof(buf));
finally
IdTCPClient1.RecvBufferSize:=16;
Disconnect;


 
atruhin ©   (2004-08-23 13:26) [6]

И вообще исходник в вопросе и в [3] отличаются принципиально, ты уж определись о каком спрашиваешь?



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

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

Наверх





Память: 0.46 MB
Время: 0.038 c
1-1097847015
Анонимщик
2004-10-15 17:30
2004.10.31
Аппроксимация контура


1-1097592193
Expl
2004-10-12 18:43
2004.10.31
вызов hlp файла при нажатии на клавишу


8-1088751372
Глеб
2004-07-02 10:56
2004.10.31
Как вставить Flash-мульт в проект Delphi?


1-1097705573
saNat
2004-10-14 02:12
2004.10.31
Как убрать курсор в TMemo


4-1094835656
nika_ufc
2004-09-10 21:00
2004.10.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский