
09.03.2011, 20:38
|
Прохожий
|
|
Регистрация: 08.07.2009
Адрес: Архангельск
Сообщения: 26
Версия Delphi: 7
Репутация: 10
|
|
Кодировка udpSocket
Здравствуйте!
Подскажите как сменить кодировку у 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.
|