[英]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.