Показать сообщение отдельно
  #1  
Старый 24.10.2011, 08:40
xss22 xss22 вне форума
Прохожий
 
Регистрация: 24.10.2011
Сообщения: 2
Репутация: 10
По умолчанию Передача memoryStream через UDP сокет

Передача 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;
Ответить с цитированием