Witam
Dlaczego pakiet danych wysyłanych przy użyciu bluetooth jest rozbity na kilka mniejszych pakietów?
Czy rozmiar pojedynczego pakietu jest stały, możliwy do odczytania?
Bluetooth_ReadWrite:
public Bluetooth_ReadWrite(BluetoothSocket socket, Handler mHandler) {
this.mHandler = mHandler;
mmSocket = socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) { }
mmInStream = tmpIn;
mmOutStream = tmpOut;
}
public void run() {
byte[] buffer = new byte[1024 * 8];
int bytes;
while (true) {
try {
bytes = mmInStream.read(buffer);
Message msg = mHandler.obtainMessage();
msg.what = 2;
msg.arg1 = bytes;
msg.obj = buffer;
mHandler.sendMessage(msg);
} catch (IOException e) {
break;
}
}
try {
mmInStream.close();
mmOutStream.close();
}catch (IOException e){ }
}
public void Write(byte[] bytes) {
try {
mmOutStream.write(bytes);
} catch (IOException e) { }
}
Main:
private void BluetoothSender_01(){
ByteBuffer BB = ByteBuffer.allocate((1 + MapCX * MapCY * MapX * MapY) * 4);
BB.putInt(1);
for (int TB_01 = 0; TB_01 < MapCX; ++TB_01){
for (int TB_02 = 0; TB_02 < MapCY; ++TB_02){
for (int TB_03 = 0; TB_03 < MapX; ++TB_03){
for (int TB_04 = 0; TB_04 < MapY; ++TB_04){
BB.putInt(MapW[TB_01][TB_02][TB_03][TB_04]);
}
}
}
}
byte[] Result = BB.array();
Bluetooth_B.ReadWrite_Thread.Write(Result);
}
private void BluetoothReceived(byte[] Buffer, int BufferSize){
Log.w("Buffer", Integer.toString(Buffer.length) + " | " + Integer.toString(BufferSize));
ByteBuffer BB = ByteBuffer.wrap(Buffer, 0, BufferSize);
int Type = BB.getInt();
if (Type == 0) BluetoothReceived_00(BB, BufferSize);
else if (Type == 1) BluetoothReceived_01(BB, BufferSize);
else if (Type == 2) BluetoothReceived_02(BB, BufferSize);
Log.e("ReceivedIndex", Integer.toString(Type));
}
private void BluetoothReceived_01(ByteBuffer BB, int BufferSize) {
boolean BT = true;
for (int TB_01 = 0; TB_01 < MapCX && BT; ++TB_01){
for (int TB_02 = 0; TB_02 < MapCY && BT; ++TB_02){
for (int TB_03 = 0; TB_03 < MapX && BT; ++TB_03){
for (int TB_04 = 0; TB_04 < MapY && BT; ++TB_04){
if (BB.position() + 4 <= BufferSize) {
MapW[TB_01][TB_02][TB_03][TB_04] = BB.getInt();
}else {
BT = false;
break;
}
}
}
}
}
}
logcat:
11-08 03:50:22.710 11169-11169/com.example.kamil.towerdefense_v3 W/Buffer﹕ 8192 | 990
11-08 03:50:22.712 11169-11169/com.example.kamil.towerdefense_v3 E/ReceivedIndex﹕ 1
11-08 03:50:22.723 11169-11169/com.example.kamil.towerdefense_v3 W/Buffer﹕ 8192 | 990
11-08 03:50:22.724 11169-11169/com.example.kamil.towerdefense_v3 E/ReceivedIndex﹕ 196608
11-08 03:50:22.725 11169-11169/com.example.kamil.towerdefense_v3 W/Buffer﹕ 8192 | 184
11-08 03:50:22.725 11169-11169/com.example.kamil.towerdefense_v3 E/ReceivedIndex﹕ 0
karolinaa