Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

Есть программа в которой реализована отправка сообщений, как сделать так что бы была возможность дополнительно передать имя отправившего и приоритет, 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 в 10:26.
le7o вне форума   Ответить с цитированием
Старый 04.11.2015, 10:36   #2
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,815
Репутация: 6832
По умолчанию

Цитата:
Пока посещают мысли парсить входящие сообщение, а отправителя и приоритет указывать в начале сообщения...
Ну логично.
Я бы сделал (т.е. я вообще-то так и делаю сейчас) так:
Код:
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, 19:25   #3
le7o
Форумчанин
 
Регистрация: 19.05.2011
Адрес: РФ, Курганская область, г. Курган
Сообщений: 116
Репутация: 34
По умолчанию

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

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

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


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

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

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

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

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

Решил юзать стандартный (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 вне форума   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использую компоненты 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 01:48
IP адрес отправителя в почте _Solomon_ Работа с сетью в Delphi 2 26.04.2007 09:14


17:02.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru