2011-05-11 25 views
6

Estoy escribiendo un pequeño programa para enviar archivos entre Android y PC a través de bluetooth. Ya he lea el ejemplo de chat bluetooth en el sitio de Google Android.Android problema de envío de archivo Bluetooth

Actualmente, mi versión funciona muy bien con el envío de un mensaje de texto a través de Bluetooth, pero cuando envío algunos archivos, alrededor de> = 20 KB, deja de funcionar y lanzando EOFException de la siguiente manera:

java.io.EOFException at java.io.ObjectInputStream$BlockDataInputStream.readFully(ObjectInputStream.java:2716) 
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1665) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1340) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1963) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1887) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368) 
    at com.test.pcserver.BluetoothServerListener.run(BluetoothServerListener.java:74) 
    at java.lang.Thread.run(Thread.java:636) 

En la actualidad, mi programa java en el PC mediante bluecove-2.1.0

Éstos son mis principales códigos:

en Android:

// Get the BLuetoothDevice object 
if (BluetoothAdapter.checkBluetoothAddress(address)) { 
    device = mBtAdapter.getRemoteDevice(address); 

     // Get a BluetoothSocket for a connection with the 
    // given BluetoothDevice 
    socket = device .createRfcommSocketToServiceRecord(ProgramConstants.BLUETOOTH_UUID); 
    socket.connect(); 

     out = new ObjectOutputStream(socket.getOutputStream()); 

    // Send it to PC 
    out.writeObject(contentObject); 
    out.flush();   
} 

En Mi PC, lo leí:

Versión PC, servidor

StreamConnectionNotifier streamConnNotifier = null; 

// Create the service url 
String connectionString = "btspp://localhost:" + ProgramConstants.BLUETOOTH_UUID.toString() 
        + ";name=myappname"; 
// open server url 
streamConnNotifier = (StreamConnectionNotifier) Connector.open(connectionString); 

while (true) { 
    // Wait for client connection 
    StreamConnection connection = streamConnNotifier.acceptAndOpen(); 
    ObjectInputStream in = new ObjectInputStream(connection.openInputStream()); 
    RemoteDevice dev = RemoteDevice.getRemoteDevice(connection); 

    // read string from spp client 
    DataInController data = new DataInController(model); 
    data.processDataIn(in.readObject(), dev.getBluetoothAddress()); 
} 
+0

¿cuál es el valor de ProgramConstants.BLUETOOTH_UUID.toString()? – Milhous

+0

¿Alguna vez lo hiciste funcionar? – Jack

+0

Oye, ¿puedes compartir tu código fuente completo? Gracias por adelantado. – anddev

Respuesta

1

Es necesario añadir después de tirar el OutputStream

out.close(); 

de lo contrario la corriente puede haberse dañado.