0
我正在做一个基于客户端 - 服务器的游戏,但在服务器有时与发送数据包的问题。在插座发送完成包
每个连接的客户端向服务器都有自己的实例(类名Peer
)。此实例有一个名为buffer
的变量ByteBuffer
。同级类是一个Runnable,所以每个客户都有自己的线程。
服务器可以发送不同类型的数据包到客户端,数据包的第一个字节是“码”,使客户端的已知,它是什么包。当客户端知道操作码时,它也知道数据包的大小。
在在同行类的螺纹while-loop
每一个刻度,在字节缓冲区的所有数据包将被sended到客户端。但是有时在bytebuffer中有一半数据包,因为另一个线程同时在其中放入字节。然后客户端读取操作码,但丢失了数据包的字节。
这是Peer类正在发送字节字节缓冲区的代码:
ByteBuffer buffer = this.buffer.duplicate();
this.buffer.clear();
int size = buffer.position();
buffer.flip();
byte[] data = new byte[size];
buffer.get(data);
out.write(data);
我怎样才能确保它发送数据包完成?