Главная страница
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.037 c
2-1133790627
adamov_a
2005-12-05 16:50
2005.12.18
StringGrid - как получить содержимое выделенных ячеек


3-1130418816
mefisto
2005-10-27 17:13
2005.12.18
Какую технологию для доступа к данным выбрать ?


9-1122150518
Иггорь
2005-07-24 00:28
2005.12.18
Как сделать точный таймер?


1-1132137870
ANB
2005-11-16 13:44
2005.12.18
Как закрыть Excel, чтобы не просил сохранить книгу ?


2-1133204119
Formcreater
2005-11-28 21:55
2005.12.18
Не могу динамически создать кнопку на форме.