Форум: "Начинающим";
Текущий архив: 2011.05.01;
Скачать: [xml.tar.bz2];
Внизпередача строки через Indy UDP Найти похожие ветки
← →
uniken1 © (2011-01-27 15:50) [0]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?
← →
12 © (2011-01-28 09:43) [1]отправляется string, юникод
а принимается как chr(
http://www.webdelphi.ru/2009/10/delphi-2010-rabota-s-klaviaturoj-v-usloviyax-unicode/
не то?
← →
Anatoly Podgoretsky © (2011-01-28 09:54) [2]Что за тип такой chr
← →
uniken1 © (2011-01-28 10:58) [3]UDPClient отправляет в процедуре Send строку, в D2010 она юникод.
UDPServer получает эту строку в массив AData.
chr -это стандартная функия(существует еще с паскаля) преобразования byte в char. Это не тип!
← →
Anatoly Podgoretsky © (2011-01-28 11:28) [4]Я отлично знаю, что это функция.
Тогда зачем ты это делаешь Caption:=Caption+chr(AData[i]);
Byte не имеет отношения к Юникод!!!
← →
uniken1 © (2011-01-28 11:59) [5]Может я что-то не так объясняю?
На выходе строка юникод: 12 символов (24 байта)
На входе массив : 12 байт которые преобразуются в 12 символов с!!
внутри массива ansi строка, которую я вывожу в заголовок формы с помощью функции chr, ну я уже не знаю как еще объяснить что в send передается юникодная строка в Read принимается ansi строка.
← →
Сергей М. © (2011-01-28 12:13) [6]> в send передается юникодная строка
А в потрохах Send"а она поди конвертируется в Ansi
Или уже на принимающей стороне принятая юникодовая строка конвертится в ansi до того как попасть через TBytes в твой обработчик.
Вот и все чудеса)
А чудес в Инди и без этого хватает, так что наблюдаемое тобой "чудо" - это еще невинная индейская шалость по сравнению с другими грабельками, граблями и граблищами.
← →
12 © (2011-01-28 12:27) [7]ух ты..
а точно?
это не работает?
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;
← →
RWolf © (2011-01-28 12:44) [8]
> Сергей М. © (28.01.11 12:13) [6]
а вот где бы ознакомиться с граблями Indy, хотя бы частично?
а то у меня через неё в одной программе HTTP-контент раздаётся интенсивно, хотелось бы заранее ознакомиться, чтобы неожиданно по лбу не ударило.
← →
Сергей М. © (2011-01-28 13:02) [9]
> RWolf © (28.01.11 12:44) [8]
http://www.indyproject.org/Sockets/Bugs.en.aspx
Самое улыбнутое там: "Тупые юзеры затрахали систему публичных баг-репортов своими дурацкими и непродуманными вопросами, поэтому отныне пусть в поисках правды парятся на разного пошиба форумах"
← →
uniken1 © (2011-01-28 13:07) [10]
> ух ты..
>
> а точно?
>
> это не работает?
>
> 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);
← →
uniken1 © (2011-01-29 08:11) [11]Хм, раньше здесь помогали...
Хорошо хоть официальном сайте объяснили все нормально
http://forums2.atozed.com/viewtopic.php?f=7&t=18617&p=22110#p22110
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.05.01;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c