2012-02-21 36 views
0

我正在使用C++中的套接字編寫客戶端 - 服務器應用程序。使用套接字,什麼是表示通信結束的最佳做法?

用於通信的協議基本上是:

  1. 客戶端連接到服務器。
  2. 客戶端向服務器「發送」一個ASCII命令。
  3. 服務器遠程執行該命令,並獲取結果,並將結果發送回客戶端。

結果可能是多兆字節的數據。一旦所有的結果都發送給客戶端,我希望服務器向客戶端發出完成信號。

是closesocket()的最佳方式,還是應該發送一條消息,指示客戶端沒有更多結果,並且客戶端可以決定是否關閉套接字?關閉套接字的缺點是客戶端需要建立一個新的連接,如果它想要執行另一個命令的話,但是從服務器發回消息的缺點是客戶端需要掃描每個recv來確定結果完成。

哪個是最佳做法?

回答

3

我會採取一種橫向的方法:

  • 客戶端發送命令到服務器
  • 響應的服務器發送大小,然後將真實的反應
  • 客戶還可以發出新的命令/關閉連接

通過這種方式,客戶端知道需要閱讀多少內容,並可以決定是否關閉連接。

+0

謝謝,這聽起來像是一個更好的方式來做到這一點。 還有一個問題:當HTTP客戶端請求網頁時,你會知道HTTP服務器執行什麼操作嗎?在發送網頁之後,HTTP服務器是否關閉了客戶端的套接字,還是保持打開狀態,並且客戶端先關閉套接字? – steve8918 2012-02-21 19:04:44

+2

http://en.wikipedia.org/wiki/HTTP_persistent_connection – 2012-02-21 20:06:56

相關問題