我正在編寫一個通用的客戶端 - 服務器套接字程序,客戶端向服務器發送命令,服務器執行它並將結果發送給客戶端。
但是,如果在執行命令時出現錯誤,我希望能夠通知客戶端有錯誤。我知道我可以發送字符串「錯誤」或類似-1等,但這些也可以是命令輸出的一部分。有沒有更好的方式通過套接字發送錯誤或異常。
我的服務器位於Java,客戶端位於Python套接字上傳遞錯誤
Q
套接字上傳遞錯誤
1
A
回答
0
通常,在進行客戶端 - 服務器通信時,您需要建立某種協議。一個非常簡單的協議是在發送任何錯誤之前發送任何命令和字符串「錯誤」之前發送字符串「命令」。這使得您必須發送的字符串數量翻倍,但提供了更大的靈活性。
還有一些更復雜的協議已經開發出來。您可以構建一個Request對象,然後將其序列化併發送給客戶端,而不是發送Strings。然後,客戶端可以重新構建Request對象,並執行請求,無論它執行錯誤還是運行命令。
0
你已經(一定)建立了一些格式或協議,從而字符串被反覆發送 - 無論你是以某種方式終止每個字符串,或先發送它的長度,或類似的東西。 (TCP本質上只是一個流,所以如果沒有這樣的協議,接收者就不可能知道命令或輸出何時完成!)
因此,無論您用什麼方法來分隔字符串,所以從服務器發送回客戶端的結果是每次兩個字符串:一個是錯誤描述(如果沒有錯誤,則爲空),另一個是命令的結果(如果沒有結果,則爲空)。這對於發送和接收/解析都是微不足道的,並且具有最小的開銷(發送空字符串應該像發送終止符或長度爲0那麼簡單)。
相關問題
- 1. 錯誤試圖通過套接字傳遞(大)圖像在python
- 2. UDP套接字上的套接字錯誤10052
- 3. aiohttp - 套接字傳輸上的致命讀取錯誤 - TimeoutError
- 4. 將本地winsock套接字傳遞給java套接字
- 5. Nodejs,雲Firestore上傳任務 - 身份驗證錯誤:錯誤:套接字掛斷
- 6. android套接字寫錯誤
- 7. dev-C++套接字錯誤
- 8. 套接字讀/寫錯誤
- 9. Java套接字錯誤
- 10. 套接字發送錯誤
- 11. 套接字錯誤1411
- 12. WCF套接字錯誤10045
- 13. 套接字錯誤10047
- 14. 套接字EADDRINUSE錯誤
- 15. 套接字綁定錯誤
- 16. C#套接字錯誤10022
- 17. 模擬套接字錯誤
- 18. Python套接字10048錯誤
- 19. I/O錯誤:套接字錯誤
- 20. 錯誤#2031:套接字錯誤。 URL:127.0.0.1
- 21. 錯誤傳遞字符串
- 22. 如何使用AWS上的套接字傳遞通知?
- 23. EAGAIN錯誤接受阻塞套接字
- 24. 接收錯誤與UDP套接字(C++)
- 25. WCF /錯誤:套接字連接中斷
- 26. Marklogic套接字連接錯誤
- 27. 傳遞錯誤
- 28. Python套接字錯誤:一個不是套接字的對象
- 29. 套接字連接上的AS3安全錯誤2048
- 30. UDP數據接收上的Python套接字錯誤。 (10054)
也許有一種方法,從服務器端,導致客戶端套接字引發異常? – 2014-05-12 08:59:55
根據我的評論創建了一個問題:http://stackoverflow.com/questions/23605248/from-the-server-side-cause-the-client-socket-to-throw-an-exception – 2014-05-12 09:39:25