2013-03-09 62 views
1

我正在爲使用自己的協議編寫的Python服務器上工作,但我遇到了問題。 客戶端連接到服務器,並且sendall()的三條數據:數據包標識字節,字符串長度和UTF-8編碼字符串。從客戶端接收的TCP服務器有時不起作用

在客戶端,我沒有錯誤,但在服務器端,此:

error: [Errno 10054] An existing connection was forcibly closed by the remote host 

發生。錯誤發生在每次不同的行上,有時候是識別字節,有時在讀取字符串長度時,有時在讀取字符串本身時,有時它會很好地工作,就像它應該的那樣。

這是怎麼回事?服務器計算機具有防火牆異常。客戶端連接,連續發送三個數據,然後關閉套接字。我做得太快了嗎?

謝謝。

+0

請從服務器和客戶端代碼發佈(即複製,粘貼,格式化SO)相關代碼片段。最好是別人可以運行的代碼來自己嘗試。此外,請描述您嘗試解決此問題的任何嘗試(http://whathaveyoutried.com/)以及爲什麼您認爲他們無法正常工作。 – crayzeewulf 2013-03-09 01:17:06

+0

管理這個的代碼分散在幾個類,@crazewulf,這將是一個很大的努力,試圖以可重用的方式重建。這個錯誤看起來像一個套接字級的錯誤,我希望有人會給我一個普遍的答案,我提供的一般信息。如果沒有發生,我會製作樣品。謝謝。 – Jishaxe 2013-03-09 01:22:34

+0

OP,在這種情況下,使用[this](http://docs.python.org/2/library/socketserver.html#socketserver-tcpserver-example)代碼作爲示例編寫您自己的小型TCP服務器和客戶端,併發送與您的大型應用程序相同的數據。看看你是否可以重現這個問題。用這個測試代碼和錯誤消息報告結果(如果有的話)。基本上,試着把問題歸結爲一個小的代碼片段,SO可以被其他人用來調試這個問題。 – crayzeewulf 2013-03-09 01:24:14

回答

2

嗯,這不是一個長期存在的問題。

它看起來像我關閉套接字客戶端太快,添加一個限制後,我停止得到錯誤。

謝謝!

0

這個問題的常見原因是寫入已經被peer關閉的連接:換句話說,應用程序協議錯誤,寫入永遠不會被讀取的數據。