Передача memoryStream через UDP сокет.
Сейчас я передаю TPacket, так, как указано в примере ниже.
Мне нужно преобразовать TPacket как memoryStream, передать его, затем сервер должен получить memoryStream и преобразовать его в TPacket.
Помогите пожалуйста, как это можно сделать.
Для чего мне это нужно? Мне нужно сжимать пакеты. Сам пакет я могу сжать, если он будет как memoryStream.
Помогите пожалуйста с примером. Но скажу сразу, нужна реконструкция только моего примера. Примеры с INDY или ClientSocket прошу не предлогать. Заранее спасибо!
В данный момент у меня реализован клиент\сервер следующим образом:
Сервер:
Код:
TPacket = packed record
Nick :string[15];
PosX: Single; //положение игрока на X оси координат
PosY: Single; //положение игрока на Y оси координат
PosZ: Single; //положение игрока на Z оси координат
IdMap : string[4]; //ID карты, на которой находится игрок
Addr : TSockAddrIn; //адрес игрока
end;
…
…
procedure RecvProc(Param: Pointer); stdcall;
var
Count : LongInt;
From : TSockAddrIn;
FromLen : LongInt;
Packet : TPacket;
i,j,k : LongInt;
t:boolean;
nick:string;
idarray:integer; //применяется только для ntConnect
idRoom:integer; //номер комнаты.
LP:integer;
begin
while true do begin
FromLen := SizeOf(From);
Count := recvfrom(ServerSocket, Packet, SizeOf(Packet), 0, From, FromLen); //получение данных, присланных сокету
if Count > 0 then begin
…
…
…
Клиент:
Код:
TPacket = packed record
Nick :string[15];
PosX: Single; //положение игрока на X оси координат
PosY: Single; //положение игрока на Y оси координат
PosZ: Single; //положение игрока на Z оси координат
IdMap : string[4]; //ID карты, на которой находится игрок
Addr : TSockAddrIn; //адрес игрока
end;
…
…
procedure Send(var Packet: TPacket; var Addr: TSockAddrIn);
begin
if sendto(SocketClient, Packet, SizeOf(Packet), 0, Addr, SizeOf(Addr)) <> SizeOf(Packet) then
log('error: sendto'#13#10 + GetErrorString);
end;