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映像的時候了!)
但是-1保證套接字真的是真的關閉?我仍然能夠發送數據到這個套接字而不會引發異常,但我不能說對方是否真的收到了它。 Wireshark是一個偉大的提示。不幸的是,自從發生這種情況後,我開始了它,並且從那以後就沒有發生。 – glenneroo 2010-01-29 15:41:13
Socket抽象支持通信的輸入和輸出端可以獨立關閉的概念。所以,如果另一端關閉了它的輸出但沒有輸入,你可以在套接字輸入結束後繼續寫套接字輸出。 – 2010-01-29 15:49:40