簡體   English   中英

帶Indy 10的Delphi-TCP通訊的最佳方法

[英]Delphi with Indy 10 - Best approach for TCP communication

我正在使用Delphi XE3和Indy 10(idTCPServer和idTCPClient)創建客戶端-服務器應用程序。

服務器端將顯示所有已連接的客戶端,我可以在列表中選擇一些客戶端,然后向其發送命令或流/文件。 為此,我創建了一個消息隊列,由Remy Lebeau先生提出。 這是我在做什么:

在此處輸入圖片說明

我想知道的是:

  1. 這是我嘗試做的一個好方法嗎?

  2. 當一側開始讀取/寫入時,它期望另一側進行寫入/讀取嗎? 如果另一邊不能怎么辦? 假設SERVER請求一個文件,但該文件不存在,那么CLIENT是否必須編寫一個“空”流來避免出現問題?

順便說一句,在隊列,錯誤處理等方面,我找不到任何很好的示例(Indy 10 TCP通信)。在Indy的網站上,有很多斷開的鏈接。 你能給我一個很好的例子的網站嗎?

謝謝你的幫助!

當一側開始讀取/寫入時,它期望另一側進行寫入/讀取嗎? 如果另一邊不能怎么辦? 假設SERVER請求一個文件,但該文件不存在,那么CLIENT是否必須編寫一個“空”流來避免出現問題?

讓客戶端發送一個答復,接受/拒絕該請求,然后再傳輸文件。 還要使接收方在傳輸完成后發送回復,以便發送方在接收方知道是否接收到整個文件。

Server: I will send a file
Client: OK
Server: FileStream
Client: OK

Server: Send me a file
Client: OK
Client: FileStream
Server: OK

Server: I will send a file
Client: Not Ready

Server: Send me a file
Client: Not Found

Server: Send me a file
Client: OK
Client: FileStream (error midway)
Server: FAILED

話雖如此,由於服務器是向客戶端發送命令的服務器,因此請考慮在客戶端使用TIdCmdTCPClient而不是TIdTCPClient 這將為您提供一個專用線程來接收服務器命令,並且您可以為命令創建OnCommand處理程序,並使用提供的TIdCommand對象發送答復。

考慮使用TIdTCPConnection.SendCmd()方法發送命令並讀取其初始響應,並使用TIdTCPConnection.GetResponse()讀取最終響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM