- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以让我的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;
最佳答案
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/
idHttpServer OnCommandGet 是否在线程内运行?我猜 Indy 创建了一个线程并在其中调用此事件,但我对此不太确定。 Indy 做到了这一点,可以在此事件中设置一个 thread
我有一个可在多个端口上访问的 TIdHTTPServer(由于迁移),我需要找出当前数据(在 OnCommandGet 中)的来源。我可以从哪里检索正确的端口号? 最佳答案 它位于AContext.B
我必须在我们的应用程序中创建一个嵌入式 HTTP 服务器。这必须创建用于进程间通信,因为另一端只能调用 WebService。 我们不需要一次处理更多请求,但我必须从主线程使用库和数据库连接。 Del
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 1年前关闭。 Imp
我想知道我是否可以有 onCommandGet 事件,我可以将客户端请求重定向到另一个主机/端口,使用 TIdHTTP(客户端)获取我需要的信息并通过 AResponseInfo 将其发送回客户端?
是否可以让我的TCPServer.OnExecute事件的行为方式与 HTTPServer.OnCommandGet 相同表现: procedure TMainForm.HttpServerComma
我在主窗体上使用 TIdHTTPServer 和 IdHTTPServer 过程的 CommandGet 创建一个 VCL 窗体应用程序: procedure TForm6.IdHTTPServerP
我有一个 TIdHTTPServer将 html 文件中的 javascript 代码发送到带有标签 的浏览器在标签。我无权访问 html 文件,因此无法更改其内容。我用 HTTPServerCom
我是一名优秀的程序员,十分优秀!