草庐IT

Delphi7_VCL

全部标签

delphi - 在 TCP 连接中使用 Bind 方法的最佳方式是什么?

我有两个应用程序在同一台机器上运行,一个充当TCP服务器,另一个充当TCP客户端。在那台机器上,我有2个网络接口(interface),所以必须告诉应该使用哪个TCP连接。为此,我一直在使用Bind方法,因为我知道一个是192.168.1.x,另一个是10.1.135.x,但我的疑问是:当我设置机器IP本身时,例如192.168.1.195这不起作用,但是如果我设置网关IP192.168.1.1就可以了。不起作用的代码是tmpTcp:=TTCPBlockSocket.Create;tmpTcp.Bind('192.168.1.195','50000');tmpTcp.Connect('

delphi - 终止来自 TIdTCPServer 的非事件套接字连接

我们有一个应用程序使用Delphi2007附带的Indy10.1.1组件监听传入的TCP请求。有时我们会收到不是来自客户端应用程序的传入连接。通常,会发生以下两种情况之一:1)在接收到任何数据之前客户端终止了连接,或者2)收到了我们不期望的数据并且我们手动终止了连接。但是,我们收到了没有收到任何数据的连接,并且似乎一直存在,直到客户端从其端终止连接。如果在指定的时间后没有收到数据,是否有办法终止与服务器的此类连接? 最佳答案 在您的OnExecute事件处理程序中,跟踪从客户端接收到最后一个良好数据的时间。使用连接的ReadTime

delphi - 一个Form可以放多个ClientSocket组件吗?

我想编写一个程序,从一台计算机连接到多台计算机。有点像“命令中心”,您可以在其中在一台PC上远程监控所有远程系统。我的计划是在一个表单上有多个客户端套接字。他们将远程连接到个人电脑。因此,他们可以向他们请求信息以显示在窗口上。远程PC将成为主机。这可能吗? 最佳答案 直接回答您的问题:是的,您可以这样做。长答案:是的,你可以这样做,但你确定你的设计是正确的吗?您确定要创建并行连接,每个客户端一个吗?可能你不知道!如果是,那么您可能希望在单独的线程中运行它们。如果您想不时发送一些命令(并且您没有进行某种持续的视频监控),为什么不只使用

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

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

delphi - 如何在 Delphi XE2 中建立 TCP/IP 连接?

我必须在DelphiXE2中开发一个简单的应用程序。此应用程序将使用TCP/IP协议(protocol)连接到具有IP地址(例如xxx.xxx.xxx.xxx)和某些端口号(例如xxxx)的服务器上运行的服务,并将获得服务器上运行的服务的回复。我创建了两个文本框:txtRequestMsg、txtReplyMsg和一个名为Connect的按钮。我需要打开一个TCP连接并发送一些数据并返回一些数据作为响应,类似于ping,但不使用ICMP,仅使用原始TCP。 最佳答案 为各种TCP客户端(发起)和TCP服务器(应答)协议(protoc

delphi - TSQLConnection.Connect with InterBase 7.5 奇怪的三分钟延迟

环境:Delphi2009客户端应用程序(和一个Java),在Windows2003服务器上运行通过dbExpress连接到InterBase7.5.1(另一个Windows2003服务器)Delphi应用程序使用TSQLConnection对象的AfterConnect事件处理程序记录打开TSQLConnection的时间。在随机间隔中,连接需要三分钟的“额外时间”。我最初怀疑这可能是SQL查询的问题,但今天更详细的日志记录显示它是挂起的SQLConnection.Connect。我不确定这是否是网络、InterBase服务器或Delphi/dbExpress层的问题。有没有人经历过

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

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

delphi - TCP 客户端未接收到来自 RTSP 服务器的响应

在DelphiXE2中,我使用TTCPClient组件与RTSP服务器通信。在反复试验未从服务器返回响应后,我将项目切换为通过端口80(而不是RTSP的554)发送HTTP请求,并尝试将请求发送到网站(具体为www.google.com)。我仍然没有收到任何回复。我在主窗体(Form1)上有一个名为Client的TTCPClient组件,一个名为TMemo的控件Log、一个名为txtHost的TEdit控件和一个TBitBtn控件。以下是代码的相关部分:连接到服务器procedureTForm1.BitBtn1Click(Sender:TObject);beginifClient.Ac

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

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

delphi - 向所有连接的客户端发送命令

我有一个TIdHttpServer我必须保持连接打开才能将一些命令发送回客户端。我想在按下按钮并向所有连接的客户端发送命令时进行迭代。我该怎么做? 最佳答案 您可以使用Contexts属性获取客户端,然后使用每个客户端的IOHandler发送消息。VarClients:TList;i:integer;beginifnotAssigned(IdTCPServer1.Contexts)thenexit;Clients:=IdTCPServer1.Contexts.LockList;tryfori:=0toClients.Count-1d