Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2011, 08:26   #1
xss22
Новичок
Джуниор
 
Регистрация: 22.12.2010
Сообщений: 1
По умолчанию Передача 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;
xss22 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача списка и combobox'а через indy udp xatrix Общие вопросы Delphi 2 18.07.2010 16:14
Передача переменной через сокет Yura_S Общие вопросы Delphi 3 25.03.2010 09:53
Передача больших файлов чрез сокет D_E_N Работа с сетью в Delphi 0 18.01.2010 19:17
Передача файла через сокет Delphi Unconnected Работа с сетью в Delphi 4 23.12.2008 16:16
Передача файлов по UDP GAGARIN-NEW Работа с сетью в Delphi 3 15.11.2007 22:45