Главная страница
    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.028 c
1-1097747889
V l a d i m i r
2004-10-14 13:58
2004.10.31
TRadioGroup


14-1097508581
Koala
2004-10-11 19:29
2004.10.31
Может кто подскажет название игры, несколько лет ищу....


1-1098070268
sergey83
2004-10-18 07:31
2004.10.31
Кириллица и RaveReport


9-1088370695
NailMan
2004-06-28 01:11
2004.10.31
Новый ГУЙ в техно-демке Universal Traveller


14-1097334147
rolex2002
2004-10-09 19:02
2004.10.31
Как на 25 и 5 гнёзда LPT порта подать напряжение?





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