我必须设置一个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,以在列表已满时阻止新连接,而不管已
我需要从IdTCPServer向特定连接的IdTCPClient发送一条字符串消息。一开始我使用的是列表框,所以我在客户端连接时将主机名添加到列表框,并在断开连接时将其删除。当时,RemyLebeau给了我这个提示:procedureTfrmMain.sendButtonClick(Sender:TObject);varIndex:Integer;Ctx:TIdContext;beginIndex:=ListBox.ItemIndex;ifIndex=-1thenExit;Context:=TIdContext(ListBox.Items.Objects[Index]);//useCo
我最近开始玩Indy10(来自DelphiXE3)和TCP连接。现在,我正在尝试创建一个简单的服务器应用程序来检查客户端状态。但是,当我尝试在某些客户端已连接的情况下停用TCPServer时,客户端会断开连接,但TCPServer会停止应答。我在某处读到TCPServer应该可以毫无问题地处理客户端的断开连接。我必须在OnExecute事件上添加一些代码才能解决这个问题吗?代码如下:procedureTfrmMain.btnConnectClick(Sender:TObject);beginIf(notTCPServer.Active)ThenTryTCPServer.Bindings
我正在使用TIdCmdTCPClient和TIdCmdTCPServer。突然发现我可能喜欢双向通信。什么最好?我应该使用其他一些组件吗?如果是这样,哪个?或者我应该拼凑并让“客户端”轮询“服务器”以询问它是否希望传达任何信息?这是一个非常小的系统。两个客户端和十个服务器,每30到60秒突发一个tarnscation,每天一次持续几分钟,因此轮询的开销是无关紧要的。我只是想知道是否有“正确”的方法。更新:这确实是一个非常简单的系统。流量很少,一切都很简单。所有传输都指示偶数类型和可选的单个参数。[]例如"HERE_IS_SOME_DATA42"这可以双向发送,悬停在这里不是“回复”。只
我正在尝试使用TServerSocket组件通过TCP套接字接收缓冲区(我正在维护一个遗留应用程序,因此暂时无法迁移到Indy或其他任何应用程序)。我已经实现了一个OnClientRead事件的方法,该方法在非阻塞套接字中读取此缓冲区(同样,我不能对这个遗留应用程序进行重大更改)。函数如下所示:procedureTFrmMain.ServerSocket1ClientRead(Sender:TObject;Socket:TCustomWinSocket);varSize:Integer;Bytes:TBytes;beginSize:=Socket.ReceiveLength;SetLe
在过去的2天里,我一直试图断断续续地找出这个问题的根源,但我真的被困住了。希望一些聪明的人能帮助我。问题是我有一个在线程中调用的函数,该线程从传递给它的网站下载文件(使用Synapse库)。但是,我发现偶尔会有网站无法下载文件,但wget或Firefox/IE会毫无问题地下载它。深入研究,我发现了一些奇怪的事情。相关代码如下:uses//[..]HTTPSend,blcksock;//[..]typeTMyThread=class(TThread)protectedprocedureExecute;override;private{Privatedeclarations}fTheUrl
最近我开始开发简单的flash(flash仅限于tcp)实时多人游戏,我需要一个服务器来提供客户端之间的通信。为此,我决定使用DelphiXE+Indy,但我发现Indy提供了同步通信模型。(我从未使用过任何Indy组件。)到目前为止,我的理解是同步(阻塞)模型限制了并发性,因此使IndyTCP服务器组件不适合实时多人游戏。我的问题是:我应该使用非阻塞通信吗?实现它的最佳工具(组件、类等)是什么?另外,如果您能给我提供使用此工具广播消息的示例(源代码),我将非常非常高兴。-我想立即向特定“房间”的每个成员发送相同的消息(但不向其他房间的成员发送消息。)。附言抱歉我的英语不好(我不是母语
在由TCPServer/Client组件编写的Socket应用程序中,通常我们先激活服务器端,然后将客户端连接到服务器,当我们需要从一侧到另一端获取或发送数据时,首先从客户端向服务器发送一个命令,然后将开始通信。但问题是我们总是需要从客户端开始对话!我想问有什么想法可以在没有客户端请求的情况下从服务器端随机开始对话吗?我需要这个功能来从服务器端通知客户端。例如,当注册用户(客户端)连接到服务器时,其他连接的用户(在其他客户端),必须从服务器向所有用户(如YahooMessenger)发送通知。我正在使用TIdCmdTCPServer和TIdTCPClient组件
我有一个TCP连接(代理),它通过socks4-5连接并通过它发送http/https/DNS流量。我需要分享一些东西,比如http/https等。通过tcp连接1和dns解析通过tcp连接2我试图创建IdTCPServer1(但我不确定在正确的轨道上),它连接但没有任何东西发送给他。另外,他挂到ReadLn是不会记录数据的,这是不允许的。procedureTForm1.IdTCPServer1Execute(AContext:TIdContext);varstr_str:String;beginstr_str:=AContext.Connection.Socket.ReadLn();