Re: [問題] socket傳送數值出錯

看板java作者 (Terry)時間18年前 (2008/01/18 21:22), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串8/10 (看更多)
※ 引述《superlubu (叔叔你人真好)》之銘言: : ※ 引述《Lordaeron (Terry)》之銘言: : : but 一件事, socket 從沒規定你送什麼, 對方就要馬上收到什麼. : : 要是被buffer 一下, 你write 兩次的, 變成第一次read 就收到了, 就有趣囉 : : -- : : ◆ From: 61.229.151.98 : : 推 superlubu:呃... 不明白你指的是什麼,可否指教一下呢? 01/18 09:29 : : → Lordaeron:寫多了你就知道的了. 特別是不要在intranet 又只有兩台 01/18 11:22 : : → Lordaeron:電腦, 試久了你就知了. 01/18 11:26 : : 推 superlubu:基本上... 我寫了十年了 ( ′-`)y-~ 01/18 11:52 : : → Lordaeron:哪你更應該了解到, send 跟receive 的次數不一定相同的 01/18 14:40 : 呃... 真的沒有看明白... 為什麼要考慮 receive 的「次數」呢? : 只要能 receive 到足夠的 data 不就行了? : 你說的「 write 兩次,變成第一次 read 就到了」的意思是... : 用兩次 writeInt(),總共送出 8 bytes,但可能這 8 bytes 會一起送到 client 手上 : 這樣嗎? : 不過... 這會做成什麼問題呢?我不明白。因為 client 這一方在 readInt() 的時候 : 只會讀進 (也必定會讀進) 4 bytes,餘下的東西會繼續放在 InputStream 中待命.... : 並不會一次就把 8 bytes 讀進然後 parse 成 integer 罷....... (API claims) : 反過來說... 用 writeInt() 寫了一次,4 bytes 可能只會先送頭 2 bytes : 但在 client 這邊讀 readInt() 時會強制等待 4 bytes 全讀入才會 return 罷... : 要是 connection time out,後 2 bytes 送不到,那就是 EOFException 了.... : 或許真的是我的工作經驗還淺? sorry, 看來是我習慣了用C 在寫了. 你講得沒錯, 的確是像你所講的, 反正java 會幫你處理掉. 不太會有其它的狀況發生. but 我遇到大多數情況, 不會有人愛用read/write Int 的做法的. 就是RFC 中也沒幾篇. anyway, 我搞錯了. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.229.161.116
文章代碼(AID): #17aAVwS8 (java)
討論串 (同標題文章)
文章代碼(AID): #17aAVwS8 (java)