Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.012 c
1-1132823354
Wolferio
2005-11-24 12:09
2005.12.18
Команды печати


2-1133226648
stef
2005-11-29 04:10
2005.12.18
Помогите с DirectX


1-1132759968
Ling
2005-11-23 18:32
2005.12.18
TVirtualStringTree - Ловкость рук и никакого мошенничества


1-1132773228
pound
2005-11-23 22:13
2005.12.18
Как нормально прекратить работу потока


4-1129897383
Гас
2005-10-21 16:23
2005.12.18
Как в TEdit отключить beep при выходе из этого контрола?





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