Форум: "Потрепаться";
Текущий архив: 2003.08.28;
Скачать: [xml.tar.bz2];
ВнизPChar по сети Найти похожие ветки
← →
mOOx_ (2003-08-10 13:53) [0]Проблема вот в чем: есть значит PChar. На клиенте я формарую месагу в эту переменную, далее мне надо это сообщение перекинуть нежду ClientSocket и ServerSocket. Но не просто перекинуть, а в структуре следующего вида:
TPackageType = (ptMessage,ptAction);
TPackage = record
CommandType: TPackageType;
Length: LongInt;
Data: pointer;
end;
Заполнение структуры в клиенте:
GetMem(Pack,sizeof(TPackage));
Pack.CommandType:=ptMessage;
Mess:=PChar("сообщение"+#0);
Pack.Data:=Mess;
Pack.Length:=StrLen(Mess);
Socket.SendBuf(Pack^,sizeof(TPackage));
FreeMem(Pack,sizeof(TPackage));
Прием данных на сервере:
GetMem(Pack,sizeof(TPackage));
DM.SvrSock.Socket.Connections[0].ReceiveBuf(Pack^,Socket.ReceiveLength);
if Pack.CommandType=ptMessage then
begin
GetMem(Mess,Pack.Length);
Mess:=Pack.Data; <- Mess в отладчике вообще ничего не показывает
ShowMessage(Mess); ( Mess)Проблема вот в чем: есть значит PChar. На клиенте я формарую месагу в эту переменную, далее мне надо это сообщение перекинуть нежду ClientSocket и ServerSocket. Но не просто перекинуть, а в структуре следующего вида:
TPackageType = (ptMessage,ptAction);
TPackage = record
CommandType: TPackageType;
Length: LongInt;
Data: pointer;
end;
Заполнение структуры в клиенте:
GetMem(Pack,sizeof(TPackage));
Pack.CommandType:=ptMessage;
Mess:=PChar("сообщение"+#0);
Pack.Data:=Mess;
Pack.Length:=StrLen(Mess);
Socket.SendBuf(Pack^,sizeof(TPackage));
FreeMem(Pack,sizeof(TPackage));
Прием данных на сервере:
GetMem(Pack,sizeof(TPackage));
DM.SvrSock.Socket.Connections[0].ReceiveBuf(Pack^,Socket.ReceiveLength);
if Pack.CommandType=ptMessage then
begin
GetMem(Mess,Pack.Length);
Mess:=Pack.Data; <- Mess в отладчике вообще ничего не показывает
ShowMessage(Mess); <- А тут вообще Access Violation
FreeMem(Mess);
end;
FreeMem(Pack);
Как бы так сделать, чтоб все было?
← →
MBo (2003-08-10 14:18) [1]Ты пересылаешь указатель - 4 байта - в другом процессе он не имеет смысла.
← →
mOOx_ (2003-08-10 14:23) [2]Точно!!! Об этом я как-то не подумал :). И как теперь тогда что?
← →
panov (2003-08-10 14:30) [3]Пересылай буфер, а не указатели, вот и все.
← →
mOOx_ (2003-08-10 14:32) [4]Это то я понял, тока мне обьявить что-то вроде
TPackage = record
CommandType: TPackageType;
Length: LongInt;
Data: TMemoryStream;
end;
???
← →
MBo (2003-08-10 14:40) [5]Сначала передаешь заголовок, в котором указано количество байт данных, затем сами данные.
← →
mOOx_ (2003-08-10 14:42) [6]Так не интересно, я так и делал, хочу все в раз передать (вот и мудрю по этому :) ). Может это не возможно, конечно...
← →
SPeller (2003-08-10 15:23) [7]TMyRec = record
Len: Integer;
Buf: array[ 0..50 ] of Char;
end;
в буфер записывай своё сообщение.
← →
SPeller (2003-08-10 15:24) [8]И тегу где-то забыли проставить :)))
← →
panov (2003-08-10 15:27) [9]
Test
← →
SPeller (2003-08-10 16:12) [10]Ещё тест.
← →
SPeller (2003-08-10 16:13) [11]Теперь нормально.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.08.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c