2015-06-17 72 views
0

我想寫一個C服務器程序,將能夠處理寫得不好的客戶端程序。客戶端向服務器發送一堆命令,然後關閉套接字。在服務器執行每個命令後,根據命令是否失敗,它應該向客戶端發送0或1。客戶端斷開連接後是否可以從客戶端套接字讀取數據?

如果我不嘗試在每個命令後發送一個字節的客戶端,一切都很好,並且在客戶端關閉套接字後,我可以繼續讀取服務器端的命令。但是,如果我確實嘗試寫入1個字節,則在從客戶端讀取1條命令後,我無法再讀取命令(由對等方重置連接)。

有沒有辦法解決這個問題?如在,能夠寫和讀所有的命令?

+1

我不明白你要做什麼。客戶端收到來自服務器的響應,然後斷開連接。在客戶端斷開連接後,服務器應該如何從客戶端獲得更多命令? –

+0

我還不清楚。客戶端發送x命令到服務器的時間比服務器處理1個命令所花費的時間少(命令一次處理1個)。如果我不試圖寫入客戶端,即使在客戶端關閉套接字後,我仍然可以讀取其餘的x-1命令。如果我寫信給客戶端,我不能再讀取任何命令。 –

回答

0

在這種情況下,您需要知道客戶端是否在發送另一個命令之前等待您對每個命令的回答。 在典型的客戶端 - 服務器連接中,客戶端啓動通信。由於您的客戶端發送了一堆命令,因此有兩種可能性:

  • 在操作結束時,您的套接字返回將會OK或NOK。
  • 對於每條消息,客戶端發送您的返回將是OK或NOK。

此外,我建議您發送任何跟蹤信息,以便我們可以評估哪種解決方案更適合您的情況。

+0

有沒有辦法來檢查插座是否正常或NOK? –

+0

如果你連接到你的同行,那麼插座是好的。 我害怕我沒有得到它.. 一個套接字是一個應用層連接,如果主機保持監聽特定的端口,然後客戶端將能夠indeffinetly發送 – rfermi

+0

有沒有辦法知道客戶端之前斷開連接我試着寫?我有一種感覺,我試圖編寫和失敗會導致問題。 –

相關問題