Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.03.2011, 20:38
crash94 crash94 вне форума
Прохожий
 
Регистрация: 08.07.2009
Адрес: Архангельск
Сообщения: 26
Версия Delphi: 7
Репутация: 10
По умолчанию Кодировка udpSocket

Здравствуйте!
Подскажите как сменить кодировку у udpSocket..
При приходе русских символов получается такая штука
Цитата:
Название сервера: .:Сталинград:.[www.vip-monitoring.ru] В©

Кусок кода
Код:
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  
Старый 09.03.2011, 20:43
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

function UTF8Decode(const S: UTF8String): WideString;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 09.03.2011, 20:59
crash94 crash94 вне форума
Прохожий
 
Регистрация: 08.07.2009
Адрес: Архангельск
Сообщения: 26
Версия Delphi: 7
Репутация: 10
По умолчанию

Извините за глупый вопрос,а куда эт или как это использовать)
Ответить с цитированием
  #4  
Старый 10.03.2011, 08:38
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
...
Memo1.Lines.Add('Название сервера: '+UTF8Decode(listReply.Strings[1]));
...
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:23.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025