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

上一篇: Indy client receive string

下一篇: curl with post method