我是INDY库中的新手,所以我使用delphi XE8和indy进行TCP客户端/服务器连接;当客户端应用程序发送消息" text"到服务器应用程序它工作,但客户端应用程序没有收到任何东西:
IdTCPClient1.IOHandler.WriteLn('OK'+edit2.Text+inttostr(incr), IndyTextEncoding_OSDefault());
LLine := IdTCPClient1.IOHandler.ReadLn();
LLine变量为空,客户端不会从服务器应用程序收到任何内容。
我再说一下,当我为WIN32测试客户端/服务器应用程序时,客户端应用程序是为Android和WIN32服务器创建的,但是当我测试Android的客户端应用程序时,客户端应用程序已连接且服务器应用程序已接收数据但客户端应用程序没有收到任何内容。
服务器端代码是:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
LLine: String;
begin
TIdNotify.NotifyMethod( ShowStartServerdMessage );
LLine := AContext.Connection.IOHandler.ReadLn(IndyTextEncoding_UTF8);
if ((char(LLine[1])='O') and (char(LLine[2])='K')) then
begin
tg.text:=sg.text;ta.text:=sa.text;
sg.text:=fg.text;sa.text:=fa.text;
fg.text:=(char(LLine[3]));fa.text:=(char(LLine[4]))+(char(LLine[5]))+(char(LLine[6]));
AContext.Connection.IOHandler.WriteLn('OK'+fa.text);
TIdNotify.NotifyMethod(StopStartServerdMessage);
sndPlaySound('C:\defi', SND_NODEFAULT Or SND_ASYNC );
end
else
if (char(LLine[1])='C') then
begin
AContext.Connection.IOHandler.WriteLn('OK'+fa.text);
TIdNotify.NotifyMethod(StopStartServerdMessage);
end;
end;
客户方:
procedure TForm1.Button2Click(Sender: TObject);
var
LLine2: String;
begin
if timer1.Enabled=false then
begin timer1.Enabled:=true;label4.text:=edit3.Text; end;
incr:=strtoint(label4.text);
incr:=incr+1;
IdTCPClient1.IOHandler.WriteLn('OK'+edit2.Text+inttostr(incr), IndyTextEncoding_UTF8);
LLine2 := IdTCPClient1.IOHandler.ReadLn();
if ((char(LLine2[1])='O') and (char(LLine2[2])='K')) then
begin
Memo1.Lines.Add('La commande est reçu par le serveur');
end;
end;
在客户端我有一个定时器事件计时器我有这个代码:
procedure TForm1.Timer1Timer(Sender: TObject);
var
s:string;
begin
IdTCPClient1.IOHandler.WriteLn('C', IndyTextEncoding_UTF8);
s := IdTCPClient1.IOHandler.ReadLn();
if ((char(s[1])='O') and (char(s[2])='K')) then
begin
label4.text:=char(s[3])+char(s[4])+char(s[5]);
end;
end;