作者Lordaeron (Terry)
站内java
标题Re: [问题] socket传送数值出错
时间Fri Jan 18 08:41:26 2008
※ 引述《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
1F:推 superlubu:呃... 不明白你指的是什麽,可否指教一下呢? 01/18 09:29
2F:→ Lordaeron:写多了你就知道的了. 特别是不要在intranet 又只有两台 01/18 11:22
3F:→ Lordaeron:电脑, 试久了你就知了. 01/18 11:26
4F:推 superlubu:基本上... 我写了十年了 ( ′-`)y-~ 01/18 11:52
5F:→ Lordaeron:哪你更应该了解到, send 跟receive 的次数不一定相同的 01/18 14:40