Форум: "Сети";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
ВнизПолучение данных через 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.021 c