草庐IT

multithreading - 如何使用 Indy 建立双向 TCP 连接?

我使用TIdTCPClient和TIdTCPServer(使用我自己的协议(protocol)),我想建立一个TCP连接,两台计算机都可以在其中发送命令和读取重播。当然,一个是server,一个是client,但是在建立连接之前,两者都必须是“serversandclients”。我不知道如何更清楚地解释这个......主要是计算机“A”会向计算机“B”发送命令,但有时,某些事件发生在计算机“B”上并且必须立即传达给计算机“A””。因此,每台计算机都应该一直监听命令,但同时它必须能够在事件发生时发送一些命令。发送命令很简单:只需向套接字写入一些内容。但是为了能够重播它们,应用程序必须从

tcp - Indy TCP - 循环读取数据

TCP服务器每8毫秒连续发送一次数据帧。我想编写一个能够接收这些数据帧的客户端。Indy9中是否有任何程序可以知道缓冲区中是否有可用数据?我当前的程序如下(我正在使用线程):procedureTThreadRead.Execute;varbuffer:array[0..755]ofbyte;//s1:string;//i:integer;beginIdTCPClient1.RecvBufferSize:=756;IdTCPClient1.Connect;whileTerminated=falsedobeginifIdTCPClient1.InputBuffer.Size=0thenId

delphi - Indy TIdTCPClient 组件偶尔不超时,收不到数据

我正在使用InternetDirectTIdTCPClient组件与远程服务通信以检索通常大小约为5k的消息。在典型的操作中,我将向服务发送大约400个请求,每个请求大约需要1秒才能完成。大多数时候一切都很完美。但是,大约百分之一的时间请求需要189秒,而我根本没有收到任何数据。为了便于讨论,我将其称为失败。我特别有兴趣了解发生故障时究竟发生了什么,这样我就可以向服务发布者提供证据。首先,失败是不可重现的。如果我重新发送一个失败的请求,它很有可能(可能是99%)成功。我还会捕获发生故障时发送的请求,因此我能够确认请求的格式是否正确。我假设在失败期间我得到了一些数据,但不是全部。这就是为

delphi - 谁将 TCP 窗口大小设置为 0,Indy 还是 Windows?

我们有一个应用程序服务器,观察到它在网络拥塞时(在客户端站点)有时发送TCP窗口大小为0的header。我们想知道是Indy还是底层Windows层负责将TCP窗口大小从标称的64K向下调整以适应可用吞吐量。我们将能够在它变为0时采取行动(没有发送任何内容,用户等待=>不好)。因此,欢迎任何指向Indy代码的信息、链接和指针...免责声明:我不是网络专家。请保持普通人可以理解的答案;-)注意:它是WindowsServer2003SP2上的Indy9/D2007。更多细节:TCP零窗口情况发生在与数据库服务器通信的中间层。它发生在最终用户提示客户端应用程序变慢的同一时刻(这就是触发网络

delphi - 如何处理网络丢失和 Indy IdTCPServer

我已经使用IdTCPServer组件创建了一个客户端/服务器应用程序。客户端连接并在应用程序的整个生命周期中保持持久连接。如果网络连接断开(这种情况经常发生,因为客户端使用无线无线网卡连接),客户端将自动重新连接。这一切都很好。我的问题是处理服务器上与丢失连接对应的套接字。他们不会检测到网络中断并自行断开连接。在阅读了几篇相关文章后,我了解到服务器无法知道连接是否断开。它必须等待某个事件才能发现这一点。所以我的问题是,我是否应该在我的服务器中构建某种机制来定期“处理”连接断开的套接字?如果是这样,怎么办?我认为一种方法是循环遍历所有连接并尝试向它们发送数据。我发现这会触发所需的“事件”

delphi - Indy 写缓冲/高效 TCP 通信

我知道,我问了很多问题......但作为一名新的delphi开发人员,我一直在思考所有这些问题:)这个使用indy10处理TCP通信。为了提高通信效率,我将客户端操作请求编码为单个字节(在大多数情况下,当然后面跟着其他数据字节,但在这种情况下只有一个字节)。问题是varBytes:TBytes;...SetLength(Bytes,1);Bytes[0]:=OpCode;FConnection.IOHandler.Write(Bytes,1);ErrorCode:=Connection.IOHandler.ReadByte;不会立即发送该字节(至少不会调用服务器执行处理程序)。例如,如

delphi - 从 "Connection Reset By Peer"Indy TCP 客户端恢复

在这种情况下我应该如何恢复?服务器崩溃,连接异常关闭。对几乎所有内容的调用都会导致“对等方重置连接”异常。我似乎已经通过在exceptblock内的TIdTCPClient对象上调用Disconnect来修复它,但它导致了一个带有相同消息的最终异常(我在第二个try-exceptblock中捕获了它)。这是Indy10和DelphiXE2。tryifnotEcomSocket.ConnectedthenEcomSocket.Connect();exceptone:ExceptiondobegintryEcomSocket.Disconnect();exceptMessageDlg('C

Hyperledger-indy aries组件使用说明

文章中如有错误,欢迎留言。Hyperledger-indy下的indy-node,indy-sdk,aries-cloudagent-python等项目,本人均进行过部署搭建并在企业项目中进行过应用,目前的目标是可以深入了解Hyperledger-indy原理,挖掘更多应用实现,欢迎随时交流。aries-cloud-agent组件使用说明开源项目地址项目说明用途应用场景使用方式开源项目地址https://github.com/hyperledger/aries-cloudagent-python项目说明Hyperledger-indy开源项目组下面包括indy-node,indy-sdk,ar

Hyperledger-indy aries组件使用说明

文章中如有错误,欢迎留言。Hyperledger-indy下的indy-node,indy-sdk,aries-cloudagent-python等项目,本人均进行过部署搭建并在企业项目中进行过应用,目前的目标是可以深入了解Hyperledger-indy原理,挖掘更多应用实现,欢迎随时交流。aries-cloud-agent组件使用说明开源项目地址项目说明用途应用场景使用方式开源项目地址https://github.com/hyperledger/aries-cloudagent-python项目说明Hyperledger-indy开源项目组下面包括indy-node,indy-sdk,ar

android - 如何使用 OAuth 2.0 从 Indy 发送 Gmail?

以下代码使用Google的Gmail服务器成功发送电子邮件,但前提是将Google帐户安全设置降低为“允许安全性较低的应用”。下面提供的代码(最初来自RemyLeBeau)没有包含OAuth2.0,如果您不想让您的用户做出看似艰难的决定来降低他们的安全设置以使您的应用程序成功,则需要OAuth2.0。如何将OAuth2.0整合到Indy解决方案中以满足Google更高的安全标准?工作解决方案:functionTTabbedwithNavigationForm.SendEmailNow(FromStr,ToStr,Subject,MessageBody,Host:String;Port: