草庐IT

delphi-2006

全部标签

delphi - Indy、发送线程和销毁的上下文

我使用Indy的TIdTCPServer(D2009,Indy10)与客户端应用程序通信。在OnExecute方法中,我创建了一个任务并将其排队。工作线程执行任务并将其放入发送队列。然后发送队列将响应发送到客户端。在发送线程中,我循环遍历服务器的上下文列表并查找与任务中存储的IP和端口信息相匹配的上下文。然后执行一些有时会引发访问冲突的发送命令(我猜上下文在发送过程中被破坏)。现在问题来了:如何确保在发送响应之前上下文没有关闭?Indy是否可以从单独的线程发送,或者一切都应该在Indy线程中完成? 最佳答案 您可以尝试在发送数据时保

delphi tserversocket 忽略第一条消息

请告知为什么会这样。在一个简单的示例服务器应用程序上,我有以下代码:procedureTForm13.ServerSocket1ClientRead(Sender:TObject;Socket:TCustomWinSocket);varstr:string;beginstr:=socket.ReceiveText;showmessage(str);end;在客户端我有clientsocket1.Open;clientsocket1.Socket.SendText(txtMSG.Text);没什么好看的。奇怪的是,当我第一次向服务器发送消息时,它被忽略了。之后每次都很好用。ClientR

delphi - TCP IP 客户端服务器应用程序如何使其工作并使其成为多线程

您好,我有来自此链接的代码HowtocontinuouslysendmessageswithTIdTCPServer?但我无法让它发挥作用。我想要同时接受客户端的多威胁服务器。代码在这里:unitUnitClientServer;interfaceusesIdCustomTCPServer,IdTCPClient,IdContext,SysUtils,Classes,Forms,StdCtrls,Controls,System.Actions,Vcl.ActnList;typeTMyPushClientThread=class(TThread)privateTCPClient:TIdT

delphi - 同一应用程序上的多个 TIdCmdTCPServers

我正在开发一个包含许多客户端请求的服务器。根据请求的类型,我想为每种类型的请求使用单独的TIdCmdTCPServer。事实上,它是一个会计软件,我想用一个单独的TIdCmdTCPServer将每个服务分开,例如一个用于会计,另一个用于库存,等等。每个TIdCmdTCPServer都有自己的一组命令处理程序,并将监听自己的端口,但所有这些都将在同一IP上激活并在同一应用程序中运行。这种方法的缺点是什么?我可以使用由所有TIdCmdTCPServer共享的单个TSchedulerThreadPool吗?或者我应该为每个使用单独的TSchedulerThreadPool吗?

Delphi Indy - 如何为 Indy 10 的 SSL-TCP 客户端/服务器链接获取 SSL 证书

我对SSL和这些加密的东西完全陌生,但我需要让在移动设备上运行的客户端和服务器DelphiXE6应用程序进行通信。必须对TCP通信进行安全加密。首先,我简单地编写了基于Win32客户端和服务器交换字符串的Delphi/IndyTIdTCPServer/TIdTCPClient。(出自SourceForge上的indy10clieservr演示:svn://svn.code.sf.net/p/indy10clieservr/code/1_sampleSimpleStringExchange)我试图通过在服务器上添加TIdServerIOHandlerSSLOpenSSL组件和在客户端上添

delphi - THttpClient 没有在 Delphi 中关闭连接

我的软件包含以下用于发布到URL的功能。我正在使用SysinternalsTCPView查看连接。发布到URL后连接未关闭。我应该如何更改立即关闭连接的代码?functionPostURL(constAURL:string;Parameters:TStrings):string;varHttpClient:THttpClient;HttpResponse:IHttpResponse;beginHttpClient:=THTTPClient.Create;tryHttpClient.ConnectionTimeout:=3000;HttpClient.ResponseTimeout:=3

delphi如何设置tcpserver接收字符串数据

我必须设置一个tcp服务来处理一些客户端请求所有请求均以1099字节长度的十六进制字符串数据包形式出现,并且均以00D0开始,以00000000结束procedureTForm2.IdTCPServer1Execute(AContext:TIdContext);beginAContext.Connection.IOHandler.ReadBytes(data,1099,False);RStr:='';forI:=0tolength(data)-1doRStr:=RStr+chr(data[i]);if(copy(RStr,1,4)='00D0')and(copy(RStr,1091,8

delphi - 在 Delphi 中检测 TCP 连接/断开

我的应用程序有一个包含StringGrid的服务器表单。服务器一次只允许连接4个客户端。当列表未满时,它将添加来自客户端的任何tcp连接。当新客户端向服务器请求TCP连接并且列表已满时,服务器应检查此列表中的客户端以查看它们是否仍处于连接状态。如果客户端仍然连接并且列表已满,则拒绝新客户端。如果一个或多个客户端不再连接,则接受新客户端,将其添加到列表并更新列表。如何知道客户端是否仍然连接? 最佳答案 您不应该在新客户端想要连接时检查死客户端。您应该将服务器的MaxConnections属性设置为4,以在列表已满时阻止新连接,而不管已

Delphi - 使用 Listview 管理 Indy TCPServer 连接

我需要从IdTCPServer向特定连接的IdTCPClient发送一条字符串消息。一开始我使用的是列表框,所以我在客户端连接时将主机名添加到列表框,并在断开连接时将其删除。当时,RemyLebeau给了我这个提示:procedureTfrmMain.sendButtonClick(Sender:TObject);varIndex:Integer;Ctx:TIdContext;beginIndex:=ListBox.ItemIndex;ifIndex=-1thenExit;Context:=TIdContext(ListBox.Items.Objects[Index]);//useCo

Delphi - 使用 Indy 检查客户端状态的简单 TCP 客户端/服务器

我最近开始玩Indy10(来自DelphiXE3)和TCP连接。现在,我正在尝试创建一个简单的服务器应用程序来检查客户端状态。但是,当我尝试在某些客户端已连接的情况下停用TCPServer时,客户端会断开连接,但TCPServer会停止应答。我在某处读到TCPServer应该可以毫无问题地处理客户端的断开连接。我必须在OnExecute事件上添加一些代码才能解决这个问题吗?代码如下:procedureTfrmMain.btnConnectClick(Sender:TObject);beginIf(notTCPServer.Active)ThenTryTCPServer.Bindings