Форум: "Сети";
Текущий архив: 2002.08.19;
Скачать: [xml.tar.bz2];
ВнизПроблема с передачей сложных данных Найти похожие ветки
← →
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 вся ветка
Форум: "Сети";
Текущий архив: 2002.08.19;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.005 c