簡體   English   中英

Indy客戶收到字符串

[英]Indy client receive string

我正在編寫一個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”部分放在計時器下,但這會導致一些主要問題。

我正在使用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;
  end;
end;   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM