Re: [問題] socket傳送數值出錯
※ 引述《superlubu (叔叔你人真好)》之銘言:
: ※ 引述《andykid (宗一郎)》之銘言:
: : 問題已經解決了...> <
: : 學長說是因為每次read()都要用一個frame
: : 所以做了多次的read()
: : 造成有資料遺失...
: 呃... 不知道這樣說好不好... 你的學長所說的是完全錯誤的...
: 跟什麼 frame 不 frame 的沒有任何關係,只是單純地 write(int b) 寫進 stream
: 去的是 character 而不是 int。所以只會把 lower-byte 的資料送出去
: higher-bytes 都會 ignore 掉。
: 重申一次... 跟什麼 frame 或 packet 完全沒有關係,Java API 的 I/O
: Stream 是在 Application level,所以是管不了什麼 packet 不 packet 的。
: 你只要試一試那個使用 Piped I/O 便會知道,那中間沒有什麼 packet 交換等等的
: 東西,但仍然會跑出 63 來。
: : 所以才會變成讀取到的值都變成63
: : 所以我改成用String做read write
: : 把所有數值接在一起一次輸出一次接收...
: : 謝謝大家的回應
: 我不知道是不是你的程式模組裡,只准許使用這個不太好用的 Writer/Reader...
: Writer/Reader 是 character based 的,是用來處理 character 的資料的
: 處理 character 以外的其他資料都是不適合的。
: 不是說你的那個解決方法不行,只是不太好
: 若果傳送與接收都用 DataOutputStream/InputStream 來代替 BufferedWriter/Reader,
: 則可以更方便地使用 writeInt, readInt 甚至 float 之類的都可以直接寫進去
: 免卻了將數值轉成 String 又將 String 轉回數值的麻煩。
but 一件事, socket 從沒規定你送什麼, 對方就要馬上收到什麼.
要是被buffer 一下, 你write 兩次的, 變成第一次read 就收到了, 就有趣囉
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.151.98
推
01/18 09:29, , 1F
01/18 09:29, 1F
→
01/18 11:22, , 2F
01/18 11:22, 2F
→
01/18 11:26, , 3F
01/18 11:26, 3F
推
01/18 11:52, , 4F
01/18 11:52, 4F
→
01/18 14:40, , 5F
01/18 14:40, 5F
討論串 (同標題文章)