Вниз
Скачать: CL | DM;

Проблема с передачей сложных данных   Найти похожие ветки 

← →
Airs ©   (2002-06-07 17:51) [0]

Есть клиент, есть сервер. Передаю такую переменную
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) [1]

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

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



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.011 c
1-60562
aaasv
2002-08-06 17:32
2002.08.19
TWordApplication


1-60627
@andrew
2002-08-08 15:25
2002.08.19
ПРИВЕТ ВСЕМ!! Прошу прощения, но... что нужно сделать,


14-60804
Mike B.
2002-07-22 15:30
2002.08.19
Гибкие методологии проектирования


1-60586
Nikoss
2002-08-06 00:10
2002.08.19
Подскажите, как узнать из какой процедуры была вызванна процедура


14-60816
Horreap
2002-07-20 21:44
2002.08.19
ID3 TAG v2




   Наверх