Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #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;
Ответить с цитированием
  #2  
Старый 24.10.2011, 08:50
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Судя по твоему вопросу, кажется, что ты хочешь передать сам объект по сеточке.
Знаком с понятием "Сериализация" (да-да, Санта-барбара).
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 24.10.2011, 08:58
xss22 xss22 вне форума
Прохожий
 
Регистрация: 24.10.2011
Сообщения: 2
Репутация: 10
По умолчанию сериализация

Как в моем примере реализовать. Помогите пожалуйста
Ответить с цитированием
  #4  
Старый 27.10.2011, 15:56
Аватар для GriLab
GriLab GriLab вне форума
Начинающий
 
Регистрация: 26.11.2010
Адрес: Минск
Сообщения: 190
Версия Delphi: XE 15.0.3890
Репутация: 415
По умолчанию

Используй компоненты Indy: записываешь объект TPacket в TMemoryStream, а потом через TIdUDPClient.WriteStream отправляешь его. Вроде так, помучай гугл немного...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:32.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025