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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2015, 04:05   #1
le7o
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 116
По умолчанию

Есть программа в которой реализована отправка сообщений, как сделать так что бы была возможность дополнительно передать имя отправившего и приоритет, IP в сети раздаются по DHCP?

P.s.: Пока посещают мысли парсить входящие сообщение, а отправителя и приоритет указывать в начале сообщения...

Что пока есть:

Отправка сообщения:
Код:
procedure TForm1.sButton1Click(Sender: TObject);
begin
  IdUDPClient1.Send('1'+#13#10+'2'+#13#10+smemo1.Lines.Text, IndyTextEncoding_UTF8);
end;
Вместо 1 и 2 планируется соответственно: отправитель и приоритет.

Получение сообщения:
Код:
procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
  const AData: TIdBytes; ABinding: TIdSocketHandle);
var
  s: String;
begin
s:= BytesToString(AData, IndyTextEncoding_UTF8);

if Pos('1', s) = 1 then
begin
    Delete(s, 1, 3);
    slabel1.caption:='Приоритет = 1';
    sMemo2.Lines.Add(ABinding.PeerIP+' - ' + s);
end
else
  sMemo2.Lines.Add('не указан приоритет');

ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, BytesToString(AData), Id_IPv4, IndyTextEncoding_UTF8);
end;

Последний раз редактировалось Stilet; 04.11.2015 в 09:26.
le7o вне форума Ответить с цитированием
Старый 04.11.2015, 09:36   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Пока посещают мысли парсить входящие сообщение, а отправителя и приоритет указывать в начале сообщения...
Ну логично.
Я бы сделал (т.е. я вообще-то так и делаю сейчас) так:
Код:
IdUDPClient1.Send('Приоритет=1'#13#10'Юзер='+Base64Encode(UserName)+#13#10+'Текст='+Base64Encode(smemo1.Lines.Text), IndyTextEncoding_UTF8);
Где Base64Encode() функция кодирования в Base64.

На сервере соответственно:
Код:
procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
  const AData: TIdBytes; ABinding: TIdSocketHandle);
begin
with TStringList.Create do begin
 text:= BytesToString(AData, IndyTextEncoding_UTF8);
 slabel1.caption:='Приоритет: '+Values['Приоритет'];
 sMemo2.Lines.Add(ABinding.PeerIP+' - ' + Base64Decode(Values['Юзер']));
 sMemo2.Lines.Add(Base64Decode(Values['Текст']));
 Free;
end;
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, BytesToString(AData), Id_IPv4, IndyTextEncoding_UTF8);
end;
Base64Decode() - функция декодирования.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.11.2015, 18:25   #3
le7o
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 116
По умолчанию

Да, спасибо...
Сначала думал использовать record, но Ваше решение гораздо лучше...
le7o вне форума Ответить с цитированием
Старый 04.11.2015, 18:46   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да не за что )
Можно и record-ить, просто как-то не модно что ли...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.11.2015, 04:22   #5
le7o
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 116
По умолчанию

Последний вопрос Base64 Вы используете от Synapse, или у Вас самописные функции с использованием indy?


Цитата:
Сообщение от Stilet Посмотреть сообщение
Да не за что )
Можно и record-ить, просто как-то не модно что ли...
le7o вне форума Ответить с цитированием
Старый 05.11.2015, 10:09   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Самописка с Delphiworld. Но можно любую.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.11.2015, 10:50   #7
le7o
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 116
По умолчанию

Спасибо, попробую поискать...

Цитата:
Сообщение от Stilet Посмотреть сообщение
Самописка с Delphiworld. Но можно любую.
le7o вне форума Ответить с цитированием
Старый 05.11.2015, 12:32   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

INDY юзай, не стесняйся. Там либо Base64 либо URIEncode() на твой вкус. Я и то и другое использую в зависимости от удобств. Но больше Base64.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.11.2015, 14:38   #9
le7o
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 116
По умолчанию

Решил юзать стандартный (System.NetEncoding.TNetEncoding) класс поставляемый с RAD XE начиная с XE7 ...

На форумах встречал много тем по base64 для XE версий Delphi - может кому и пригодится:

Код:
uses System.NetEncoding;
кодирование:
Код:
 
sMemo4.Lines.Add(TNetEncoding.Base64.Encode(sMemo3.Text));
декодирование:
Код:
 
sMemo3.Lines.Add(TNetEncoding.Base64.Decode(sMemo4.Text));

Цитата:
Сообщение от Stilet Посмотреть сообщение
INDY юзай, не стесняйся. Там либо Base64 либо URIEncode() на твой вкус. Я и то и другое использую в зависимости от удобств. Но больше Base64.
le7o вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использую компоненты IdUDPClient, IdUDPServer, при компляции проекта ошибка [dcc32 Error] E2003 Undeclared identifier: 'TIdBytes' Eugene_Stoun Общие вопросы Delphi 1 28.04.2014 10:26
Получение сообщения idUDPClient virtuhay266 Работа с сетью в Delphi 1 07.12.2011 08:33
IdUDPServer/IdUDPClient D2009 и кириллица Gulik Работа с сетью в Delphi 0 01.06.2011 18:13
Определение адресса отправителя Максим2006 Безопасность, Шифрование 7 20.11.2008 00:48
IP адрес отправителя в почте _Solomon_ Работа с сетью в Delphi 2 26.04.2007 09:14