2010-01-29 69 views
2

根據Java文檔,讀取()方法返回:DataInputStream的read()是什麼意思?

  • -1,如果沒有更多的數據,因爲最終的流已達到

我不太明白他們意思是「流尾」。

目前,我發現這種情況時關閉/重新打開套接字(我從很多谷歌搜索中瞭解到這是一種可接受的方式來處理此問題)。 -1可能是「正常」的行爲?我不應該如此戲劇性地反應嗎?也許最好只是因IOException而煩惱?

套接字創建:

clientSocket = new Socket(InetAddress.getByName(remoteHost), remotePort, InetAddress.getByName(sourceIpAddress), 0); 

一些背景資料:

  • 創建套接字時我使用了 'localAddr' 屬性(項目要求)
  • 我正在在Windows XP SP2上運行
  • 我不知道遠程服務器如何處理套接字(或甚至是什麼語言,不是那應該重要)
  • 這種情況很少發生(可能每天一次)
  • 只運行Linux
  • 麻煩,某些客戶端一個特定的遠程客戶端發生的和我自己都是衆多防火牆
  • 這個從未與客戶機上運行各種口味發生的背後的XP(可能是安裝運行Linux的VMware映像的時候了!)

回答

2

套接字的另一端已經關閉了流,所以沒有更多的數據要讀 - 你已經到了最後。我會使用Wireshark等網絡監視器進一步診斷套接字爲何關閉。

+0

但是-1保證套接字真的是真的關閉?我仍然能夠發送數據到這個套接字而不會引發異常,但我不能說對方是否真的收到了它。 Wireshark是一個偉大的提示。不幸的是,自從發生這種情況後,我開始了它,並且從那以後就沒有發生。 – glenneroo 2010-01-29 15:41:13

+1

Socket抽象支持通信的輸入和輸出端可以獨立關閉的概念。所以,如果另一端關閉了它的輸出但沒有輸入,你可以在套接字輸入結束後繼續寫套接字輸出。 – 2010-01-29 15:49:40