Главная страница
    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.021 c
4-1129578400
leonidus
2005-10-17 23:46
2005.12.18
Как очистить клавиатурный буфер?


1-1132804734
Separator
2005-11-24 06:58
2005.12.18
Запись через BlockWtite


14-1132681508
Shastox
2005-11-22 20:45
2005.12.18
Приглашения на mail.google.com


14-1133011647
rosermark
2005-11-26 16:27
2005.12.18
отдам стопку дисков с софтом всем желающим.


1-1132217128
Ярослав
2005-11-17 11:45
2005.12.18
Путь до файлу службы





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