Главная страница
    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.032 c
8-1090225353
dedMazDie
2004-07-19 12:22
2004.10.31
Быстрая работа с файлами Jpeg


14-1097275955
saNat
2004-10-09 02:52
2004.10.31
Rational Rose


4-1096276788
Shira333
2004-09-27 13:19
2004.10.31
Как узнать HWND окна?


1-1098180690
Домовенок
2004-10-19 14:11
2004.10.31
Как сделать независимые формы?


3-1096557345
Vemer
2004-09-30 19:15
2004.10.31
отображение полей TimeStamp в IbExpert





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский