草庐IT

Delphi Indy 客户端发送 64 KB 包,服务器收到 2 个包,共 64 KB

使用Indy的TIdTCPServer组件,一个包被分两部分接收,但客户端发送了一个64KB的包。如何在服务器OnExecute事件中接收完整的包?现在我放了一个原型(prototype)(服务器和客户端)代码来重现这种情况。服务器代码procedureTFrmServer.IdTCPServer1Execute(AContext:TIdContext);VarReceivedBytesTCP:Integer;IBuf:TIdBytes;beginifNotAContext.Connection.IOHandler.InputBufferIsEmptythenBeginTryRecei

Delphi - Indy TCPServer 如何管理客户端连接?

我正在创建一个仅在Windows操作系统上运行的客户端-服务器应用程序,每个Windows用户将一次连接到服务器。局域网使用DHCP,所以IP不固定。我需要将字符串消息从IdTCPServer发送到特定的IdTCPClient。一开始我使用的是列表框,所以我在连接时将主机名添加到列表框,在断开连接时将其删除。当时,RemyLebeau给了我这个提示:procedureTfrmMain.sendButtonClick(Sender:TObject);varIndex:Integer;Ctx:TIdContext;beginIndex:=ListBox.ItemIndex;ifIndex=

sockets - 未收到 Indy TCP 客户端数据

更新似乎这个问题不像我想的那样与Indy密切相关,更多的是关于多线程的主题。我不会100%相信这个问题。我有一个工作应用程序,它使用IndyTCP客户端与通信伙伴交换ascii字符串。通信流程如下所示:[IndyLevel]Sender发送字符串[TCP级别]Wireshark告知此数据包已交付给接收者[TCPLevel]接收方发送一个TCPACK来确认这个数据包[Indy关卡]recipient的IOHandler.ReadLn方法返回数据[IndyLevel]通过writeLn()向原始发送者发送逻辑确认最近我注意到在那个通信中有一个小问题,在摆弄了wireshark之后我得到了以

Delphi 7,indy9 tcp 音频流

我正在尝试使用Delphi7和Indy9制作一个通过TCP连接使用音频流的应用程序。更清楚地说,如何从客户端麦克风流式传输输入并将其发送到(TCP或HTTP服务器)?考虑实时。谢谢 最佳答案 我从来没有这样做过,但我认为你可以从基础开始......设置要使用的帧率,8000hz是不错的选择选择要从麦克风捕获的block大小(1024、2048、4096,等等)以shortint或float32(RAW音频)格式从麦克风捕获音频将这个block放在一个套接字缓冲区中,最好是UDP,然后发送到另一端通过UDP连接如果你在这个过程中循环,

Delphi 和 Indy - 如何从 IdTCPServer 向特定的 IdTCPClient 发送内容

我最近开始玩Indy10(来自DelphiXE3)和TCP连接。在您的帮助下(特别感谢RemyLebeau),我已经可以构建一个简单的服务器应用程序来管理客户端连接(参见此处Delphi-SimpleTCPclient/serverusingIndytocheckclientsstatus)。我正在使用列表框来添加连接的客户端。看代码:procedureTfrmMain.TCPServerConnect(AContext:TIdContext);varHost:String;beginHost:=UpperCase(GStack.HostByAddress(AContext.Bindi

Delphi - 与 Indy 组件的 SSL TCP 通信

我在DelphiXE2中使用TIdSSLIOHandlerSocketOpenSSLIndy组件通过TCP将数据发送到SSL服务器(Apple推送通知服务)。我已经在一定程度上发挥了作用,但不确定我是否以最好的方式进行。我正在做以下事情:设置SSL属性公司。证书路径调用.Open方法打开连接检查OnStatusInfoEx事件中的AType参数,直到我收到“握手完成”消息使用.WriteDirect发送数据用.Close关闭连接有没有更好的方法知道连接何时准备好发送数据?有人有直接通过TCP使用TIdSSLIOHandlerSocketOpenSSL组件的示例代码吗?我发现的示例主要用

delphi - Indy 服务器 TIdTCPServer.OnExecute 在客户端断开连接后连续调用

我知道我希望从客户端获得多少字节(在此代码中为100)。如果客户端不给我100,我根本不需要这个数据包,因为它已损坏。我遇到客户端提供少于100个字节并断开连接的情况。在这种情况下,我正在捕获异常并且一切都会好起来的,除了在这个异常之后我的ServerTCPExecute被不连续地调用了很多次。没有任何其他客户端连接。为什么会这样?如果我执行TIdYarnOfThread(AContext.Yarn).Thread.Terminate;一切正常。但我不确定这是好的解决方案。procedureForm1.ServerTCPExecute(AContext:TIdContext);begi

delphi - 如何使用 TIdTCPClient 或其他 Indy 客户端组件计算网站的响应时间?

我有一个使用TIdTCPClient从给定网站发送和接收数据的应用程序-如下所示:TCPClient.Host:=myHost;TCPClient.Port:=myPort;TCPClient.Connect;TCPClient.IOHandler.Write(clientRequest);TCPClient.IOHandler.ReadStream(clientResponse,size,False);clientRequest是动态创建的,clientResponse是服务器(所需网站)发送的响应。所以我的问题是如何计算平均响应时间从我的TCPClient连接到的网站?

Delphi XE 7 Indy IRC 检测连接丢失

一切正常,但有时在几个小时后连接可能会丢失。我应该如何检测聊天不再有效?我应该使用PING/PONG事件来检测吗?这种情况很少见,但仍有可能发生。感谢您的建议。 最佳答案 是的,应该使用IRCPING和PONG命令来提高连接稳定性。服务器和客户端可以发送“空”(无操作,心跳)消息来保持连接。如果一方不再收到这些消息,则可以认为连接丢失。如果服务器检测到没有响应的客户端,则服务器可以简单地关闭连接。客户端可以显示一条错误消息并建议用户重新连接或自动重新连接。单独添加无操作(心跳)消息将有助于保持连接稳定,因为一些网络组件可能会在长时间

Delphi 2007,Indy 10 - 单向传输数据 block 的最简单的 TCP/IP 设置是什么

我有一个应用程序(“服务器”)每秒更新内存中的数据block-大约100k字节。在同一网络上的其他工作站上运行着1到4个“客户端”应用程序的其他实例,这些实例需要每秒读取相同的100k图像。到目前为止,这是通过将图像写入服务器上的文件并让客户端通过网络从该文件中读取来实现的。这多年来一直没有问题,但最近(恰逢转向基于Windows8的硬件)它出现了一个问题,除了一个节点之外,所有节点都无法访问该文件。退出在此节点上运行的客户端应用程序会释放文件,然后所有人都可以再次访问它。对于这次锁定的原因,我仍然感到困惑,但我想知道它是否可能是讨论的机制here,其中文件由于网络故障而未关闭。我认为