Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.05.01;
Скачать: CL | DM;

Вниз

передача строки через 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
15-1295472588
Юрий
2011-01-20 00:29
2011.05.01
С днем рождения ! 20 января 2011 четверг


1-1253290411
Артем
2009-09-18 20:13
2011.05.01
Search


3-1256619451
vovka-x13
2009-10-27 07:57
2011.05.01
Аутентификация в базах данных


15-1286406735
Кто б сомневался
2010-10-07 03:12
2011.05.01
Синхронизация


2-1295860172
Артём
2011-01-24 12:09
2011.05.01
Склонение женских и мужских фамилий.