2013-04-02 140 views
3

我創建了TCP Java客戶端/服務器應用程序,我們有兩個插槽:java.net.SocketException異常:套接字關閉TCP客戶端服務器通信

  • 一個是交換消息。
  • 二是文件傳輸。

我已經在服務器中創建,以通過接受ServerSockets創造插座一,二
2個ServerSockets。

首先,客戶端通過第一個套接字發送一些字節,以便它可以告訴服務器它需要哪個文件。

然後服務器通過第二個套接字發送文件到客戶端。
客戶端收到文件後,會嘗試將傳輸完成消息發送回服務器。

那裏我得到了封閉套接字的例外。
但是,我從來沒有關閉套接字到現在。
我只關閉分離文件的緩衝區。
即使我在發送文件後嘗試再次打開socketInputStream,錯誤仍然是一樣的。
此外,如果我不關閉緩存文件的緩衝區,客戶端不會得到文件。

服務器異常

錯誤的返回信息 - java.net.SocketException異常:插座關閉

客戶端異常

服務器響應 - 爪哇。 net.SocketException:導致軟件連接中止:套接字寫入錯誤

我在做什麼錯?

+0

你應該真的添加一些代碼和堆棧跟蹤... –

+0

確保你關閉連接的一端,如果不是這種情況比我確定你關閉了輸入或輸出流,請不要關閉它們,直到你確信你的數據通信已經結束,並且你想要向套接字發送數據時使用flush()方法 – Vijay

+1

[官方原因爲「軟件導致連接中止:套接字寫入錯誤」](http:// stackoverflow.com/questions/2126607/official-reasons-for-software-caused-connection-abort-socket-write-error) – EJP

回答

16

'套接字關閉'異常意味着發現異常的應用程序關閉了套接字,然後一直試圖使用它。您可能不知道關閉套接字的輸入或輸出流會關閉另一個流和套接字。對於「軟件導致連接中止」,請參閱重複鏈接。

+0

我只關閉緩存文件的緩衝區,它是讀取Socket的outPutStream的緩衝區。這是我正在考慮關閉Socket的唯一一個。如果我不關閉緩衝區,客戶端不會收到該文件。 – lemanou

+0

@lemanou所以你關閉了插座。然後,後來發生了'套接字關閉'異常,因爲您一直使用關閉的套接字。你將不得不打開一個新的。 – EJP

+3

其實是的。這是問題所在。我用DataOutputStream替換了緩衝區讀取器,然後用FileInputStream讀取文件,然後通過DataOutputStream發送它。我只需要關閉FileInputStream來完成「傳輸」。謝謝! :) – lemanou

相關問題