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

看板java作者 (Terry)時間18年前 (2008/01/18 08:41), 編輯推噓2(203)
留言5則, 2人參與, 最新討論串6/10 (看更多)
※ 引述《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
寫多了你就知道的了. 特別是不要在intranet 又只有兩台
01/18 11:22, 2F

01/18 11:26, , 3F
電腦, 試久了你就知了.
01/18 11:26, 3F

01/18 11:52, , 4F
基本上... 我寫了十年了 ( ′-`)y-~
01/18 11:52, 4F

01/18 14:40, , 5F
哪你更應該了解到, send 跟receive 的次數不一定相同的
01/18 14:40, 5F
文章代碼(AID): #17Z_MtJl (java)
討論串 (同標題文章)
文章代碼(AID): #17Z_MtJl (java)