Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

передача строки через Indy UDP


uniken1 ©   (2011-01-27 15:50:00) 

Delphi 2010!
Код на стороне клиента:
procedure TForm1.Button2Click(Sender: TObject);
var s:string;
begin
s:='Test Message';
IdUDPClient1.Send(Edit1.Text,9999,s);;
end;

Код на стороне сервера:
procedure TForm1.UDPServerUDPRead(AThread: TIdUDPListenerThread; AData: TBytes;
 ABinding: TIdSocketHandle);
 var i:integer;
begin
 for I := 0 to length(AData) - 1 do
   Caption:=Caption+chr(AData[i]);
end;

Этот код работает, но почему отправляемая строка в юникоде (на сколько я понял в 2010 тип string это юникод), а принимаемая в анси? Это я что-то не так настроил или это особенность работы Indy?


uniken1   (2011-01-29 08:11:00) [1]

Хм, раньше здесь помогали...
Хорошо хоть официальном сайте объяснили все нормально
http://forums2.atozed.com/viewtopic.php?f=7&t=18617&p=22110#p22110


uniken1   (2011-01-28 13:07:00) [2]


> ух ты..
>
> а точно?
>
> это не работает?
>
> procedure TForm1.btn1Click(Sender: TObject);
> begin
>  idpclnt1.Send('127.0.0.1',5555,'Ёкарный бабай');
> end;
>
> procedure TForm1.idpsrvr1UDPRead(Sender: TObject; AData:
>   TStream;  ABinding: TIdSocketHandle);
> begin
>  mmo1.Lines.LoadFromStream(AData);
> end;

Этот код работал до 2010. В 2010 сам метод имеем другие параметры:
UDPServerUDPRead(AThread: TIdUDPListenerThread; AData: TBytes;
ABinding: TIdSocketHandle);


Сергей М.   (2011-01-28 13:02:00) [3]


> RWolf ©   (28.01.11 12:44) [8]


http://www.indyproject.org/Sockets/Bugs.en.aspx

Самое улыбнутое там: "Тупые юзеры затрахали систему публичных баг-репортов своими дурацкими и непродуманными вопросами, поэтому отныне пусть в поисках правды парятся на разного пошиба форумах"


RWolf   (2011-01-28 12:44:00) [4]


> Сергей М. ©   (28.01.11 12:13) [6]

а вот где бы ознакомиться с граблями Indy, хотя бы частично?
а то у меня через неё в одной программе HTTP-контент раздаётся интенсивно, хотелось бы заранее ознакомиться, чтобы неожиданно по лбу не ударило.


12   (2011-01-28 12:27:00) [5]

ух ты..

а точно?

это не работает?

procedure TForm1.btn1Click(Sender: TObject);
begin
 idpclnt1.Send('127.0.0.1',5555,'Ёкарный бабай');
end;

procedure TForm1.idpsrvr1UDPRead(Sender: TObject; AData: TStream;  ABinding: TIdSocketHandle);
begin
 mmo1.Lines.LoadFromStream(AData);
end;


Сергей М.   (2011-01-28 12:13:00) [6]

> в  send передается юникодная строка

А в потрохах Send'а она поди конвертируется в Ansi
Или уже на принимающей стороне принятая юникодовая строка конвертится в ansi до того как попасть через TBytes в твой обработчик.
Вот и все чудеса)
А чудес в Инди и без этого хватает, так что наблюдаемое тобой "чудо" - это еще невинная индейская шалость по сравнению с другими грабельками, граблями и граблищами.


uniken1   (2011-01-28 11:59:00) [7]

Может я что-то не так объясняю?
На выходе строка юникод: 12 символов ( 24 байта)
На входе массив : 12 байт которые преобразуются в 12 символов с!!

внутри массива ansi строка, которую я вывожу в заголовок формы с помощью функции chr, ну я уже не знаю как еще объяснить что в  send передается юникодная строка в Read принимается ansi строка.


Anatoly Podgoretsky   (2011-01-28 11:28:00) [8]

Я отлично знаю, что это функция.
Тогда зачем ты это делаешь    Caption:=Caption+chr(AData[i]);
Byte не имеет отношения к Юникод!!!


uniken1   (2011-01-28 10:58:00) [9]

UDPClient отправляет в процедуре Send строку, в D2010 она юникод.
UDPServer получает эту строку в массив AData.

chr -это стандартная функия(существует еще с паскаля) преобразования byte в char. Это не тип!


Anatoly Podgoretsky   (2011-01-28 09:54:00) [10]

Что за тип такой chr


12   (2011-01-28 09:43:00) [11]

отправляется string, юникод
а принимается как chr(

http://www.webdelphi.ru/2009/10/delphi-2010-rabota-s-klaviaturoj-v-usloviyax-unicode/

не то?


Наверх

Титульная страница Поиск, карта сайта Написать письмо