2010-02-20 44 views
1

我正在編寫一個通用的客戶端 - 服務器套接字程序,客戶端向服務器發送命令,服務器執行它並將結果發送給客戶端。

但是,如果在執行命令時出現錯誤,我希望能夠通知客戶端有錯誤。我知道我可以發送字符串「錯誤」或類似-1等,但這些也可以是命令輸出的一部分。有沒有更好的方式通過套接字發送錯誤或異常。

我的服務器位於Java,客戶端位於Python套接字上傳遞錯誤

+0

也許有一種方法,從服務器端,導致客戶端套接字引發異常? – 2014-05-12 08:59:55

+0

根據我的評論創建了一個問題:http://stackoverflow.com/questions/23605248/from-the-server-side-cause-the-client-socket-to-throw-an-exception – 2014-05-12 09:39:25

回答

0

通常,在進行客戶端 - 服務器通信時,您需要建立某種協議。一個非常簡單的協議是在發送任何錯誤之前發送任何命令和字符串「錯誤」之前發送字符串「命令」。這使得您必須發送的字符串數量翻倍,但提供了更大的靈活性。

還有一些更復雜的協議已經開發出來。您可以構建一個Request對象,然後將其序列化併發送給客戶端,而不是發送Strings。然後,客戶端可以重新構建Request對象,並執行請求,無論它執行錯誤還是運行命令。

0

你已經(一定)建立了一些格式或協議,從而字符串被反覆發送 - 無論你是以某種方式終止每個字符串,或先發送它的長度,或類似的東西。 (TCP本質上只是一個流,所以如果沒有這樣的協議,接收者就不可能知道命令或輸出何時完成!)

因此,無論您用什麼方法來分隔字符串,所以從服務器發送回客戶端的結果是每次兩個字符串:一個是錯誤描述(如果沒有錯誤,則爲空),另一個是命令的結果(如果沒有結果,則爲空)。這對於發送和接收/解析都是微不足道的,並且具有最小的開銷(發送空字符串應該像發送終止符或長度爲0那麼簡單)。