1,593
社区成员
发帖
与我相关
我的任务
分享
unit Client_Unit;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient;
type
Tfrm_client = class(TForm)
btn_connect: TButton;
mmoInput: TMemo;
mmoOutput: TMemo;
edt_IP: TEdit;
edt_port: TEdit;
idtcpclnt1: TIdTCPClient;
btn_rest: TButton;
procedure btn_connectClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure btn_restClick(Sender: TObject);
private
{ Private declarations }
function SendStream(const AIdTCPClient: TIdTCPClient; const Aip: string;
const Aport:integer; var AsendStream,ARecvStream: string): integer;
procedure initipport;
public
{ Public declarations }
end;
var
frm_client: Tfrm_client;
implementation
{$R *.dfm}
procedure Tfrm_client.btn_connectClick(Sender: TObject);
var
msSend, msRecv:string;
amp: TStream;
iRet:integer;
a:STring;
ia:String;
begin
msSend := mmoinput.Text; //发送文本框中的内容
//计算XML包文的长度,并按照协议保持六位数
ia := IntToStr(Length(msSend));
if Length(ia) = 5 then ia := ia + ' '
else if Length(ia) = 4 then ia := ia+' '
else if Length(ia) = 3 then ia := ia+' '
else if Length(ia) = 2 then ia := ia+' '
else if Length(ia) = 1 then ia := ia+' '
else if Length(ia) > 6 then ia := leftstr(ia, 6); //10.1版本 leftstr用不了吗?
mssend := ia + edt_IP.Text + '006 ' +mssend; //按通信协议拼接需要通过socket发送的内容
iRet := SendStream(IdTCPClnt1, trim(edt_IP.Text), strtoint(trim(edt_port.Text)),msSend,msRecv); //调用socket通信函数
mmoOutput.Text:='';
mmoOutput.Lines.Add(msRecv); //把服务器返回的内容显示出来
end;
procedure Tfrm_client.btn_restClick(Sender: TObject);
begin
initipport;
end;
procedure Tfrm_client.FormShow(Sender: TObject);
begin
initipport;
end;
procedure Tfrm_client.initipport;
begin
edt_IP.Text := '127.0.0.1';
edt_port.Text := '1111';
end;
function Tfrm_client.SendStream(const AIdTCPClient: TIdTCPClient; const Aip: string;
const Aport:integer; var AsendStream,ARecvStream: string): integer;
begin
result:=-1;
if AIdTCPClient = nil then exit;
if not AIdTCPClient.Connected then
begin
try
AIdTCPClient.Host := Aip;
AIdTCPClient.Port := Aport;
AIdTCPClient.Connect(200); //TCP建立连接 这里报错改下面可以
//AIdTCPClient.ConnectTimeout := 200
except
result:=-2;
AIdTCPClient.Disconnect;
exit;
end;
end;
try
//下面这句也报错
aidtcpclient.Write(AsendStream); //直接把准备好发送的内容,写入缓冲区即可
except
result:=-3;
AIdTCPClient.Disconnect;
exit;
end;
try
//接收
//下面这句也报错
ARecvStream:=aidtcpclient.CurrentReadBuffer(); //把服务器端返回的内容接收到。此处是直接把接收缓冲区的内容全部收完,没有按通信协议进行指定接收
result:=1;
except
result:=-4;
AIdTCPClient.Disconnect;
exit;
end;
end;
end.