作者superlubu (叔叔你人真好)
看板java
标题Re: [问题] socket传送数值出错
时间Fri Jan 18 15:26:17 2008
※ 引述《Lordaeron (Terry)》之铭言:
: but 一件事, socket 从没规定你送什麽, 对方就要马上收到什麽.
: 要是被buffer 一下, 你write 两次的, 变成第一次read 就收到了, 就有趣罗
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ 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 了....
或许真的是我的工作经验还浅?
--
《为了要得到真相,就要向原 PO 伸图》
那就是伸图魔人的没图没真相原则,那时我们坚信那就是逼逼死的真实
靠么,图咧?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 147.8.130.225
1F:推 adrianshum:虽然我没有太多这方面的经验, 但以我所知的 socket 01/18 17:27
2F:→ adrianshum:programming 模式也是和你一样的, so次数有何干呢?... 01/18 17:27