我目前正在尝试使用Indy在TCP之上编写自定义的更高级别的协议(protocol)。本质上,我想发送一条记录(使用流),但这条记录可以指示后面的x个字节将是一个图像文件。因此,当服务器收到记录时,如果它的内容表明它后面有图像,则需要将记录和图像数据分开。varSegment:TDPPSegment;Segment2:TDPPSegment;Buffer:TIdBytes;Buffer2:TIdBytes;Mem:TMemoryStream;beginif(Client.Connected)thenbeginSegment.NameStr:='Adrian';Segment2.Name
我需要从ServerSocket获取连接ID。我通过客户端发送文本,我需要知道哪个客户端发送了文本。有什么想法吗?? 最佳答案 procedureTf_serveur.ServerSocket1ClientRead(Sender:TObject;Socket:TCustomWinSocket);beginMemo1.Lines.Add(Socket.RemoteAddress+'\>'+Socket.ReceiveText);``//Socket.RemoteAddressistheclientip//Socket.RemoteHo
我使用Indy的TIdTCPServer(D2009,Indy10)与客户端应用程序通信。在OnExecute方法中,我创建了一个任务并将其排队。工作线程执行任务并将其放入发送队列。然后发送队列将响应发送到客户端。在发送线程中,我循环遍历服务器的上下文列表并查找与任务中存储的IP和端口信息相匹配的上下文。然后执行一些有时会引发访问冲突的发送命令(我猜上下文在发送过程中被破坏)。现在问题来了:如何确保在发送响应之前上下文没有关闭?Indy是否可以从单独的线程发送,或者一切都应该在Indy线程中完成? 最佳答案 您可以尝试在发送数据时保
请告知为什么会这样。在一个简单的示例服务器应用程序上,我有以下代码:procedureTForm13.ServerSocket1ClientRead(Sender:TObject;Socket:TCustomWinSocket);varstr:string;beginstr:=socket.ReceiveText;showmessage(str);end;在客户端我有clientsocket1.Open;clientsocket1.Socket.SendText(txtMSG.Text);没什么好看的。奇怪的是,当我第一次向服务器发送消息时,它被忽略了。之后每次都很好用。ClientR
您好,我有来自此链接的代码HowtocontinuouslysendmessageswithTIdTCPServer?但我无法让它发挥作用。我想要同时接受客户端的多威胁服务器。代码在这里:unitUnitClientServer;interfaceusesIdCustomTCPServer,IdTCPClient,IdContext,SysUtils,Classes,Forms,StdCtrls,Controls,System.Actions,Vcl.ActnList;typeTMyPushClientThread=class(TThread)privateTCPClient:TIdT
我正在开发一个包含许多客户端请求的服务器。根据请求的类型,我想为每种类型的请求使用单独的TIdCmdTCPServer。事实上,它是一个会计软件,我想用一个单独的TIdCmdTCPServer将每个服务分开,例如一个用于会计,另一个用于库存,等等。每个TIdCmdTCPServer都有自己的一组命令处理程序,并将监听自己的端口,但所有这些都将在同一IP上激活并在同一应用程序中运行。这种方法的缺点是什么?我可以使用由所有TIdCmdTCPServer共享的单个TSchedulerThreadPool吗?或者我应该为每个使用单独的TSchedulerThreadPool吗?
我对SSL和这些加密的东西完全陌生,但我需要让在移动设备上运行的客户端和服务器DelphiXE6应用程序进行通信。必须对TCP通信进行安全加密。首先,我简单地编写了基于Win32客户端和服务器交换字符串的Delphi/IndyTIdTCPServer/TIdTCPClient。(出自SourceForge上的indy10clieservr演示:svn://svn.code.sf.net/p/indy10clieservr/code/1_sampleSimpleStringExchange)我试图通过在服务器上添加TIdServerIOHandlerSSLOpenSSL组件和在客户端上添
我的软件包含以下用于发布到URL的功能。我正在使用SysinternalsTCPView查看连接。发布到URL后连接未关闭。我应该如何更改立即关闭连接的代码?functionPostURL(constAURL:string;Parameters:TStrings):string;varHttpClient:THttpClient;HttpResponse:IHttpResponse;beginHttpClient:=THTTPClient.Create;tryHttpClient.ConnectionTimeout:=3000;HttpClient.ResponseTimeout:=3
我必须设置一个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
我的应用程序有一个包含StringGrid的服务器表单。服务器一次只允许连接4个客户端。当列表未满时,它将添加来自客户端的任何tcp连接。当新客户端向服务器请求TCP连接并且列表已满时,服务器应检查此列表中的客户端以查看它们是否仍处于连接状态。如果客户端仍然连接并且列表已满,则拒绝新客户端。如果一个或多个客户端不再连接,则接受新客户端,将其添加到列表并更新列表。如何知道客户端是否仍然连接? 最佳答案 您不应该在新客户端想要连接时检查死客户端。您应该将服务器的MaxConnections属性设置为4,以在列表已满时阻止新连接,而不管已