Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.18;
Скачать: CL | DM;

Вниз

Получение данных через TCP соединение   Найти похожие ветки 

 
Tor ©   (2005-09-09 09:51) [0]

Доброго времени суток любезный ALL!
Вот такая проблема: с клиента отправляю рекорд(record). А на сервере пытаюсь прочитать этот рекорд в массив. Если же на сервере читать в рекорд то все проходит на ура. Но мне надо именно в массив, но почемуто он не заполняется, вот пример кода.

TOpenCash = record
   Mode: Byte;
   Password: Longword;
end;
FDataArray : Array [0..15999] of Byte;
POpenCash : ^TOpenCash;
...
procedure TDM.TCPServerExecute(AThread: TIdPeerThread);
var
 PData: Pointer;
 I: Byte;
begin
 PData := Addr(FDataArray[0]);
 try
   AThread.Connection.ReadBuffer(PData, SizeOf(FDataArray));
 except
   {}
 end;
 POpenCash := PData;
 I := POpenCash.Mode;
end;


 
Digitman ©   (2005-09-09 10:06) [1]

нестыковка получается ..

отправляешь SizeOf(TOpenCash) = 16 байт, а принимать пытаешься почему-то SizeOf(FDataArray) = 16000 байт

?


 
Tor ©   (2005-09-09 10:15) [2]

Ты хош сказать что оно ждет приема отстальных 16000 - 16 байт. Точно что то и в голову не пришло. Так какже тогда всеж получить эту рекод. посылать сначало ее размер, а тока потом читать в массив?


 
Digitman ©   (2005-09-09 10:32) [3]

POpenCash = ^TOpenCash;
TOpenCash = packed record
  Mode: Byte;
  Password: Longword;
end;

FDataArray : Array [0..15999] of Byte;
...

procedure TDM.TCPServerExecute(AThread: TIdPeerThread);
var
PData: POpenCash;
I: Byte;
begin
PData := @FDataArray;
try
  AThread.Connection.ReadBuffer(PData^, SizeOf(PData^));
  I := PData.Mode;
except
  {}
end;
end;


 
Tor ©   (2005-09-09 10:50) [4]

Фенкс получилось, но только, PData надо объявлять не как рекорд, а как указатель, т.е.
PData: ^POpenCash;
Спасибо :)
А вот такой вопрос: если с клиента отправляеться сначало один символ, потом рекорд. На сервере можно все прочитать в один массив за раз или тоже надо читать несколько раз?


 
Digitman ©   (2005-09-09 10:57) [5]


>  PData надо объявлять не как рекорд, а как указатель


здрасть-приехали !

а это что

PData: POpenCash;

?

объявления

PData: ^POpenCash;
и
PData: POpenCash; //где POpenCash = ^TOpenCash;

абсолютно эквивалентны !


> если с клиента отправляеться сначало один символ, потом
> рекорд. На сервере можно все прочитать в один массив за
> раз или тоже надо читать несколько раз?


да как угодно) .. разницы нет никакой


 
Tor ©   (2005-09-09 10:59) [6]

сори звтыкал :) Код не копировал и у себя сначала объявил как запись а не указатель



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

Текущий архив: 2005.12.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.039 c
14-1132910754
Pazitron_Brain
2005-11-25 12:25
2005.12.18
Что бы было...


2-1133434190
JTAG
2005-12-01 13:49
2005.12.18
Коллеги подскажите как создать форму


3-1130939140
Asail
2005-11-02 16:45
2005.12.18
Отображение поля типа TimeStamp...


14-1132500496
Piter
2005-11-20 18:28
2005.12.18
Помогите, пожалуйста, опознать песенку...


2-1133454377
stef
2005-12-01 19:26
2005.12.18
Вопрос по image