Re: [問題] socket傳送數值出錯
※ 引述《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
討論串 (同標題文章)