![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Передача 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
|
||||
|
||||
![]() Судя по твоему вопросу, кажется, что ты хочешь передать сам объект по сеточке.
Знаком с понятием "Сериализация" (да-да, Санта-барбара). — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
|||
|
|||
![]() Как в моем примере реализовать. Помогите пожалуйста
|
#4
|
||||
|
||||
![]() Используй компоненты Indy: записываешь объект TPacket в TMemoryStream, а потом через TIdUDPClient.WriteStream отправляешь его. Вроде так, помучай гугл немного...
|