IdTCPClient 发送消息包含中文的变成乱码,麻烦看下小弟我这个代码
IdTCPClient 发送消息包含中文的变成乱码,麻烦看下我这个代码
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RzPrgres, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, ExtCtrls, XPMan, ComCtrls, Buttons;
type
TForm1 = class(TForm)
XPManifest1: TXPManifest;
tmrCheckServerMsg: TTimer;
IdTCPClient: TIdTCPClient;
mmoinfo: TMemo;
Edtmsg: TEdit;
btnDisconect: TButton;
btnConnect: TButton;
pbProgress1: TRzProgressBar;
pbProgress: TProgressBar;
BitBtn1: TBitBtn;
procedure btnDisconectClick(Sender: TObject);
procedure EdtmsgKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure btnConnectClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure IdTCPClientWork(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Int64);
procedure tmrCheckServerMsgTimer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses TypInfo;
{$R *.dfm}
procedure TForm1.btnConnectClick(Sender: TObject);
var
Response: string;
UserName: string;
name:pchar;len:dword;
begin
len:=30;
getmem(name,30);
getcomputername(name,len);
IdTCPClient.ConnectTimeout := 5000;
IdTCPClient.Connect;
username:=name;
//UserName := Format('U%.5d', [Random(99999)]);
IdTCPClient.IOHandler.WriteLn(UserName);
Response := IdTCPClient.IOHandler.ReadLn;
if SameText(Response, 'LOGINED') then
begin
btnDisconect.Enabled := True;
btnConnect.Enabled := False;
tmrCheckServerMsg.Enabled := True;
Caption := 'Client - ' + UserName;
end
else raise Exception.CreateFmt('登录失败: "%s"', [Response]);
end;
procedure TForm1.btnDisconectClick(Sender: TObject);
begin
btnConnect.Enabled:=True;
btnDisconect.Enabled:=False;
tmrCheckServerMsg.Enabled:=False;
Caption:='Client';
IdTCPClient.Disconnect;
end;
procedure TForm1.EdtmsgKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_RETURN then
begin
if not IdTCPClient.Connected then Exit;
if edtMsg.Text<>''then
begin
IdTCPClient.IOHandler.WriteLn(edtMsg.Text);
//edtmsg.Text:= EnCodeUTF8(edtMsg.Text);
mmoInfo.Lines.Add(Format('发送消息:"%s"',[edtMsg.Text]));
edtMsg.Clear;
end;
Key:=0;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
try
if IdTCPClient.Connected then
btnDisconect.Click;
except
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
IdTCPClient.Host:='127.0.0.1';
IdTCPClient.Port:=7982;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
form1.btnConnect.Click;
end;
procedure TForm1.IdTCPClientWork(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Int64);
begin
//
pbProgress.Position:=AWorkCount;
Application.ProcessMessages;
end;
type
TSizeType = (stB, stK, stM, stG, stT);
function FormatFileSize(Size: Extended; MaxSizeType: TSizeType; var ReturnSizeType: TSizeType;
const IncludeComma: Boolean = True): string; overload;
const
FormatStr: array[Boolean] of string = ('0.##', '#,##0.##'); {do not localize}
var
DivCount: Integer;
begin
ReturnSizeType := stB;
DivCount := 0;
while (Size >= 1024) and (ReturnSizeType <> MaxSizeType) do
begin
Size := Size / 1024;
Inc(DivCount);
case DivCount of
1: ReturnSizeType := stK;
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RzPrgres, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, ExtCtrls, XPMan, ComCtrls, Buttons;
type
TForm1 = class(TForm)
XPManifest1: TXPManifest;
tmrCheckServerMsg: TTimer;
IdTCPClient: TIdTCPClient;
mmoinfo: TMemo;
Edtmsg: TEdit;
btnDisconect: TButton;
btnConnect: TButton;
pbProgress1: TRzProgressBar;
pbProgress: TProgressBar;
BitBtn1: TBitBtn;
procedure btnDisconectClick(Sender: TObject);
procedure EdtmsgKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure btnConnectClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure IdTCPClientWork(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Int64);
procedure tmrCheckServerMsgTimer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses TypInfo;
{$R *.dfm}
procedure TForm1.btnConnectClick(Sender: TObject);
var
Response: string;
UserName: string;
name:pchar;len:dword;
begin
len:=30;
getmem(name,30);
getcomputername(name,len);
IdTCPClient.ConnectTimeout := 5000;
IdTCPClient.Connect;
username:=name;
//UserName := Format('U%.5d', [Random(99999)]);
IdTCPClient.IOHandler.WriteLn(UserName);
Response := IdTCPClient.IOHandler.ReadLn;
if SameText(Response, 'LOGINED') then
begin
btnDisconect.Enabled := True;
btnConnect.Enabled := False;
tmrCheckServerMsg.Enabled := True;
Caption := 'Client - ' + UserName;
end
else raise Exception.CreateFmt('登录失败: "%s"', [Response]);
end;
procedure TForm1.btnDisconectClick(Sender: TObject);
begin
btnConnect.Enabled:=True;
btnDisconect.Enabled:=False;
tmrCheckServerMsg.Enabled:=False;
Caption:='Client';
IdTCPClient.Disconnect;
end;
procedure TForm1.EdtmsgKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_RETURN then
begin
if not IdTCPClient.Connected then Exit;
if edtMsg.Text<>''then
begin
IdTCPClient.IOHandler.WriteLn(edtMsg.Text);
//edtmsg.Text:= EnCodeUTF8(edtMsg.Text);
mmoInfo.Lines.Add(Format('发送消息:"%s"',[edtMsg.Text]));
edtMsg.Clear;
end;
Key:=0;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
try
if IdTCPClient.Connected then
btnDisconect.Click;
except
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
IdTCPClient.Host:='127.0.0.1';
IdTCPClient.Port:=7982;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
form1.btnConnect.Click;
end;
procedure TForm1.IdTCPClientWork(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Int64);
begin
//
pbProgress.Position:=AWorkCount;
Application.ProcessMessages;
end;
type
TSizeType = (stB, stK, stM, stG, stT);
function FormatFileSize(Size: Extended; MaxSizeType: TSizeType; var ReturnSizeType: TSizeType;
const IncludeComma: Boolean = True): string; overload;
const
FormatStr: array[Boolean] of string = ('0.##', '#,##0.##'); {do not localize}
var
DivCount: Integer;
begin
ReturnSizeType := stB;
DivCount := 0;
while (Size >= 1024) and (ReturnSizeType <> MaxSizeType) do
begin
Size := Size / 1024;
Inc(DivCount);
case DivCount of
1: ReturnSizeType := stK;