Indy客户端收到字符串
我正在编写一个Indy聊天应用程序,并且想知道服务器组件是否有办法告诉客户端有一个字符串在等待,或者甚至让客户端有一个“OnExecute”事件。 这是我现在所拥有的:
服务器:
procedure TServer.ServerExecute(AContext: TIdContext);
var
sResponse: string;
I: Integer;
list: Tlist;
begin
List := Server.Contexts.LockList;
sResponse:= AContext.Connection.Socket.ReadLn;
try
for I := 0 to List.Count-1 do
begin
try
TIdContext(List[I]).Connection.IOHandler.WriteLn(sResponse);
except
end;
end;
finally
Server.Contexts.UnlockList;
end;
end;
客户:
procedure TForm1.Button1Click(Sender: TObject);
var
sMsg : string;
begin
Client.Socket.WriteLn(edit1.Text);
sMsg := Client.Socket.ReadLn;
Memo1.Lines.Add(sMsg);
end;
问题是当我有2个或更多的客户端运行消息保持堆栈,因为按钮每次只处理1条消息。 我希望有一种方式让客户端等待消息,当它被触发时,它会处理这些消息,就像现在在按钮过程中那样。 我试图将“readln”部分放在计时器下,但这会导致一些重大问题。
Im使用Delphi 2010和Indy 10
procedure TForm1.Timer1Timer(Sender: TObject);
var
sMsg : string;
begin
IdIOHandlerStack1.CheckForDataOnSource(0);
sMsg := IdIOHandlerStack1.InputBuffer.AsString;
if not (sMsg ='') then begin
Memo1.Lines.Add(IdIOHandlerStack1.InputBuffer.AsString);
IdIOHandlerStack1.InputBuffer.Clear;
结束; 结束;
链接地址: http://www.djcxy.com/p/76475.html