gpt4 book ai didi

delphi - HTTPServer OnCommandGet 的 Indy TCPServer OnExecute 模拟

转载 作者:行者123 更新时间:2023-12-03 18:22:23 27 4
gpt4 key购买 nike

是否可以让我的TCPServer.OnExecute事件的行为方式与 HTTPServer.OnCommandGet 相同表现:

procedure TMainForm.HttpServerCommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
AResponseInfo.ResponseNo := 200;
AResponseInfo.ContentType := 'text/plain';
AResponseInfo.ContentText := 'Hello';
end;

我试过这个:
procedure TMainForm.TCPServerExecute(AContext: TIdContext);
begin
AContext.Connection.IOHandler.WriteLn('Hello');
end;

但它会无限次向浏览器发送“Hello”,直到我使服务器处于非事件状态。

最佳答案

TIdHTTPServer不会触发 OnCommand...事件,直到它从客户端读取完整的 HTTP 请求。
您的 TIdTCPServer根本没有阅读任何请求。TIdTCPServer.OnExecute是一个循环事件。它在连接的生命周期内连续触发。事件处理程序的职责是决定在每次循环迭代中做什么,并提供适合正在实现的通信协议(protocol)的任何必要的读/写逻辑。
在您的示例中,您所做的只是在每次循环迭代中编写一行文本,这就是为什么您会看到浏览器中出现无穷无尽的行。您的事件处理程序逻辑需要比这更有条理。这就是协议(protocol)的全部内容。在您的情况下,由于您正在与 Web 浏览器进行通信,因此您需要实现 HTTP protocol (这就是 TIdHTTPServer 为您所做的)。

关于delphi - HTTPServer OnCommandGet 的 Indy TCPServer OnExecute 模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24082880/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com