![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте!
Подскажите как сменить кодировку у udpSocket.. При приходе русских символов получается такая штука Цитата:
Кусок кода Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Sockets, StdCtrls,IdComponent, ExtCtrls,ShellAPI; type TForm1 = class(TForm) UdpSocket1: TUdpSocket; btnInfo: TButton; Memo1: TMemo; btnClose: TButton; edtIp: TEdit; edtPort: TEdit; lblIP: TLabel; lblPort: TLabel; lblURL: TLabel; procedure btnInfoClick(Sender: TObject); procedure btnCloseClick(Sender: TObject); procedure lblURLClick(Sender: TObject); private { Private declarations } public { Public declarations } end; type PCSdata=^TCSdata; TCSdata=record mysor:array[0..3] of byte; // ver:byte; hostname:array[0..255] of Char; map:string[32]; game_directory:string[32]; game_description:string[255]; num_players:Char; max_players:Char; app_id:SmallInt; num_of_bots:Char; dedicated:Char; os:Char; password:Char; secure:Char; game_version:array[0..32] of Char ; end; var Form1: TForm1; a:PCSdata; b:TCSdata; i:Integer; AData2: array[0..1024] of Char; implementation {$R *.dfm} procedure TForm1.btnCloseClick(Sender: TObject); begin Close; end; function HexToInt(s: string): integer; label gte; var tempt: string; i: integer; begin tempt := ''; if s = '' then begin HexToInt := 0; goto gte; end; for i := 1 to Length(s) do begin tempt := tempt + IntToHex(Ord(s[i]), 2); end; HexToInt := StrToInt('$' + tempt); gte: end; procedure TForm1.btnInfoClick(Sender: TObject); var tempS:string[255]; Reply,count,maxCount:string; listReply:TStringList; i:Integer; begin Memo1.Lines.Clear; UdpSocket1.BlockMode:=bmNonBlocking;//неблокирующий режим UdpSocket1.RemoteHost:=edtIp.Text; UdpSocket1.RemotePort:=edtPort.Text; listReply:=TStringList.Create; try UdpSocket1.Open; UdpSocket1.Sendln('яяяяTSource Engine Query',' '); UdpSocket1.ReceiveBuf(tempS,255); UdpSocket1.WaitForData(1000);//сколько ждать данные Reply:=Reply+tempS; UdpSocket1.ReceiveBuf(tempS,255); Reply:=Reply+tempS; UdpSocket1.ReceiveBuf(tempS,255); Reply:=Reply+tempS; if Reply='' then begin Memo1.Lines.Add('Сервер недоступен!!!'); UdpSocket1.Close; Exit; end; Delete(Reply,1,4); for I := 0 to Length(Reply)-1 do begin if Reply[i]=#0 then Reply[i]:=#13; //#6 end; // Reply:=StringReplace(Reply,#6,#13#10,[rfReplaceAll,rfIgnoreCase]); listReply.text:=Reply; Memo1.Lines.Add('IP адрес сервера: '+listReply.Strings[0]); Memo1.Lines.Add('Название сервера: '+listReply.Strings[1]); Memo1.Lines.Add('Текущая карта: '+listReply.Strings[2]); Memo1.Lines.Add('Директория игры: '+listReply.Strings[3]); Memo1.Lines.Add('Описание: '+listReply.Strings[4]); tempS:=listReply.Strings[5];//hex count:=Copy(tempS,1,1);//Кол-во игроков на сервере maxCount:=Copy(tempS,2,1);//Максимальное кол-во игроков Memo1.Lines.Add('Кол-во игроков на сервере: '+IntToStr(HexToInt(count))); Memo1.Lines.Add('Максимальное кол-во игроков: '+IntToStr(HexToInt(maxCount))); finally listReply.Free; end; end; end. Последний раз редактировалось Admin, 09.03.2011 в 21:01. |
#2
|
||||
|
||||
![]() function UTF8Decode(const S: UTF8String): WideString;
Пишу программы за еду. __________________ |
#3
|
|||
|
|||
![]() Извините за глупый вопрос,а куда эт или как это использовать)
|
#4
|
||||
|
||||
![]() Код:
... Memo1.Lines.Add('Название сервера: '+UTF8Decode(listReply.Strings[1])); ... Пишу программы за еду. __________________ |