songxinjianqwe / Chat

Java NIO+多线程实现聊天室

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[BUG]消息丢失

ngtrio opened this issue · comments

while ((size = client.read(buf)) > 0) {
                    buf.flip();
                    baos.write(buf.array(), 0, size);
                    buf.clear();
 }

在ReadEventHandler中,TCP可能粘包,此处baos存入的可能是多条消息的字节流,反序列化会导致客户端到达的部分消息丢失。(在ReadEventHandler中sleep一下就能看到此bug)

是的,确实有这个问题。可以先写一个包的长度,再读取这个长度,看后面可以读的字节数有没有这么长,没有的话就全部放回,有的话再读出来