Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с передачей сложных данных [D5, Win95/98, WinXP]


Airs ©   (2002-06-07 17:51:00) 

Есть клиент, есть сервер. Передаю такую переменную
type CPU = record
Architecture:Integer;
Count:Integer;
Level:Integer;
Revision:Integer;
Version:String;
ActiveProcessorMask:Integer;
CPUSpeed:String;
RealCPUSpeed:String;
end;
Передаю с использованием буфера т.е., на стороне клиента:
ClientSocket.Socket.SendBuf(CPUI,sizeof(CPUI));
Принимаю на стороне сервера:
ServerSocket.Socket.Connections[i].ReceiveBuf(CPUI,ServerSocket.Socket.Connections[i].ReceiveLength);

Где CPUI:CPU;
Выдает ошибку при присваивании например Label1.Caption:=CPUI.Version;

Если делаю структуру
type CPU = record
Architecture:Integer;
Count:Integer;
Level:Integer;
Revision:Integer;
Version:String[2];
ActiveProcessorMask:Integer;
CPUSpeed:String[2];
RealCPUSpeed:String[2];
end;
То все нормально.... Как справиться с этой проблемой?
Видимо не может передать по сокету большое кол-во байт? или в чем проблема?


Digitman   (2002-06-07 18:47:00) [1]

в том, что String - не тоже самое. что String[]
поле твоей структуры типа String хранит указатель на управляющую структуру существующей (в момент передачи) строки а АП передающего процесса, этот указатель ты и передаешь вместо собственно строки. А в АП принимающего процесса этот указатель - ничто !
Поле же типа String[] хранит именно саму строку, поэтому и передача/прием ее корректны.

Для передачи поля типа String необходимо передать сначала размер строки (Length), затем уже - собственно строку (PChar)


Наверх

Титульная страница Поиск, карта сайта Написать письмо