![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получение данных через TCP соединение [D7, Win2k]
Tor © (2005-09-09 09:51:00)Доброго времени суток любезный 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;
Tor (2005-09-09 10:59:00) [1]сори звтыкал :) Код не копировал и у себя сначала объявил как запись а не указатель
Digitman (2005-09-09 10:57:00) [2]
> PData надо объявлять не как рекорд, а как указатель
здрасть-приехали !
а это что
PData: POpenCash;
?
объявления
PData: ^POpenCash;
и
PData: POpenCash; //где POpenCash = ^TOpenCash;
абсолютно эквивалентны !
> если с клиента отправляеться сначало один символ, потом
> рекорд. На сервере можно все прочитать в один массив за
> раз или тоже надо читать несколько раз?
да как угодно) .. разницы нет никакой
Tor (2005-09-09 10:50:00) [3]Фенкс получилось, но только, PData надо объявлять не как рекорд, а как указатель, т.е.
PData: ^POpenCash;
Спасибо :)
А вот такой вопрос: если с клиента отправляеться сначало один символ, потом рекорд. На сервере можно все прочитать в один массив за раз или тоже надо читать несколько раз?
Digitman (2005-09-09 10:32:00) [4]POpenCash = ^TOpenCash;
TOpenCash = packedrecord
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:15:00) [5]Ты хош сказать что оно ждет приема отстальных 16000 - 16 байт. Точно что то и в голову не пришло. Так какже тогда всеж получить эту рекод. посылать сначало ее размер, а тока потом читать в массив?
Digitman (2005-09-09 10:06:00) [6]нестыковка получается ..
отправляешь SizeOf(TOpenCash) = 16 байт, а принимать пытаешься почему-то SizeOf(FDataArray) = 16000 байт
?