java 板


LINE

※ 引述《dremel (hadoop)》之銘言: : 小弟初學 練習SOCKET : 我從良葛葛java教學網站上那 : copy JAVA SOCKET : http://ideone.com/raPS80 SERVER端 : http://ideone.com/T5rkQt CLIENT端 : 一開始我在同一台電腦不同資料夾做檔案傳輸 : 步驟>先執行SERVER>使SERVER頃聽 : 在執行CLIENT>SERVER會接收檔案。 : 一開始我在同一台電腦不同資料夾做檔案傳輸,這樣是成功的! : (IP為127.0.0.1) : 但若我在不同的電腦上作傳輸(更改另一台PC的IP) : SERVER端放PC1 : CLIENT端放PC2 : 我發現檔案是有傳過來但傳得不完整,檔案的大小總是會少幾個BYTE : 使這個傳過來的檔案無發開啟!!! : 是這支程式哪一行有問題嗎? : 好像只能在單一的電腦傳才能成功。 : 麻煩高手求救 謝謝 你附上的程式碼,理論上你在同一台電腦上測一樣會出錯,只是機率比較低而已。 主要的問題在於 framing 沒有做好。主要出錯的是在 server site 這一方。 至於出錯的部分在於 BufferedInputStream 的使用方式,這個錯誤的使用方式 其實蠻常見到,只是少有人去注意它。 先談一下 BufferedInputStream 的特性,它採 decorator pattern,持有另一個 InputStream,而自己偽裝成 InputStream。它內部還有一個 buffer(如其名), 每當 BufferedInputStream 執行任何 read/skip 操作時,它會盡量去消耗他持有 的 InputStream,來把 buffer 填滿。 因為這個特性,我們必須假設每次對 BufferedInputStream 執行了 read 操作 後,來源 InputStream 已經被消耗了一大段,這一段會是(雖然不總是)比從 BufferedInputStream 取出來的還多。也就是 BufferedInputStream 取出來的 + BufferedInputStream 內部 buffer 剩的 = 來源 InputStream 所消耗的 所以當你把一個 InputStream S decorate 成 BufferedInputStream B 後,有 執行過 read/skip 操作,那麼你就要繼續使用 B 來消耗 S 內的數據,否則你 以其他方式從 S 取得的數據流就可能是不完整的(很大的可能有一些部分在 B 的 buffer 裡)。 *上述所提同樣適用在 BufferedReader 上。 目前 client site 是先傳檔名、換行後接檔案內容,那 server site 要自己去 判斷出屬於檔名的部分(以換行來切割),這必須要雙方去協調定義好"換行"的部分。 這種簡單的應用情景下,比較簡單的方式是透過 DataOutput 的 writeUTF 操作 來傳遞一個字串(String),其做法是把字串以 UTF-8 編碼後的長度先以兩個 bytes 送出,然後是編碼後的 byte sequence;DataInput - readUTF 則是反過來。 我稍微修改後的程式碼供你參考 Client2(http://ideone.com/y6fdEl) Server2(http://ideone.com/Ay0vD3) --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.166.238.27 ※ 編輯: sbrhsieh 來自: 218.166.238.27 (12/09 16:22)
1F:推 gmoz:讚 12/09 19:27
2F:推 dream1124:sb大不知道在哪上班, 令人好想去當你同事 12/09 20:08
3F:→ luoqr:Java API 應該讓你來寫的 12/09 20:25
4F:推 LaPass:推 12/09 20:33
5F:→ DeathWatch:一點都不錯 解釋得真棒 之前碰過這問題 12/09 21:44
6F:推 danny8376:推~~~ 12/09 22:21
7F:推 Killercat:大推 這複雜機制可以解釋得那麼清楚 XD 12/10 10:10
8F:推 dremel:推~~ 12/11 16:17
9F:推 kaufmann:有看有推 04/08 23:26







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP