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);
我怎樣才能確保它發送數據包完成?