作者Lordaeron (Terry)
站内java
标题Re: [问题] socket传送数值出错
时间Fri Jan 18 21:22:01 2008
※ 引述《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