Hi friends, I'm trying to send an file from android device to specific bluetooth device by using third party api called bluecove with obex. I can able to connect the device when connection header set I'm facing up an problem that peer connection reset.
Here my below code snippet. any help on this appreciated.
In my activity I'm using below code to process send file
BlueCoveImpl.setConfigObject(
BlueCoveConfigProperties.PROPERTY_ANDROID_CONTEXT,
this);
String deviceAddress = "0007ABB6D96E";
int channel = 9;
String obexURL = "btgoep://" + deviceAddress + ":"
+ "0000110600001000800000805f9b34fb" + ";android=true";
// String obexURL = "btgoep://" + deviceAddress + ":" + channel
// + ";android=true";
String fileToSend = "sdcard/DSCN9379.jpg";
System.out.println("Connecting to " + obexURL);
FileInputStream stream = new FileInputStream(fileToSend);
File f = new File(fileToSend);
int size = (int) f.length();
byte file[] = new byte[size];
stream.read(file);
String filename = f.getName();
System.out
.println("***************Now sending file to device*****************");
SendFileTask task = new SendFileTask(MainActivity.this, obexURL,
file, filename);
Thread thread = new Thread(task);
thread.start();
================ below that i'm trying to connect bluecove connection class object with header set as follows.
package com.example.bluecovesample;
import java.io.OutputStream;
import javax.microedition.io.Connection;
import javax.microedition.io.Connector;
import javax.obex.ClientSession;
import javax.obex.HeaderSet;
import javax.obex.Operation;
import javax.obex.ResponseCodes;
//import static write ;
import android.content.Context;
import android.widget.Toast;
public class SendFileTask implements Runnable {
private byte[] file;
private String filename;
public static final int WRITE = 2;
String logString;
int responseCode;
Context context;
String obexURL;
public SendFileTask(Context ctx, String obexUrl, byte[] file,
String filename) {
this.context = ctx;
this.obexURL = obexUrl;
this.file = file;
this.filename = filename;
}
public void run() {
Connection connection = null;
try {
System.out.println(obexURL);
// for ( int i = 0; i 3; i++ )
{
// connection = Connector.open("btgoep://"+btConnectionURL+
// ":6");
connection = Connector.open(obexURL);
}
// connection obtained
// now, let's create a session and a headerset objects
ClientSession cs = (ClientSession) connection;
HeaderSet hs = cs.createHeaderSet();
// toastMsg(hs.toString());
// now let's send the connect header
// cs.notifyAll();
**cs.connect(hs);**
hs.setHeader(HeaderSet.NAME, filename);
// System.out.println("sfname:"+filename);
int dotIndex = filename.lastIndexOf(".");
// System.out.println("doti:"+dotIndex);
String extension = filename.substring(dotIndex).toLowerCase();
// System.out.println("sfname:"+extension);
if (extension.equals(".txt")) {
hs.setHeader(HeaderSet.TYPE, "text/plain");
} else if (extension.equals(".jpg") || extension.equals(".jpeg")) {
hs.setHeader(HeaderSet.TYPE, "image/jpeg");
} else if (extension.equals(".mpeg") || extension.equals(".mpg")
|| extension.equals(".mp3")) {
hs.setHeader(HeaderSet.TYPE, "video/mpeg");
} else if (extension.equals(".wav")) {
hs.setHeader(HeaderSet.TYPE, "audio/x-wav");
} else if (extension.equals(".3gp")) {
hs.setHeader(HeaderSet.TYPE, "image/jpeg");
} else if (extension.equals("mid") || extension.equals("rmi")) {
hs.setHeader(HeaderSet.TYPE, "audio/mid");
}
hs.setHeader(HeaderSet.LENGTH, new Long(file.length));
Operation putOperation = cs.put(hs);
// System.out.println("response code:"+putOperation.getResponseCode());
// putOperation.getResponseCode();
// this.responseCode = putOperation.getResponseCode();
OutputStream outputStream = putOperation.openOutputStream();
outputStream.write(file);
// file push complete
outputStream.close();
responseCode = putOperation.getResponseCode();
putOperation.close();
cs.disconnect(null);
connection.close();
// file successfully sent
System.out.println("RESPONSE CODE " + responseCode);
if (responseCode == ResponseCodes.OBEX_HTTP_OK) {
System.out.println("FILE SUCCESSFULLY SENT " + filename);
}
else {
System.out.println("FILE SUCCESSFULLY NOT SENT" + filename
+ " not in exception");
}
} catch (Exception e) {
System.out.println("FILE SUCCESSFULLY NOT SENT" + filename
+ " in exception");
// System.out.println("In exception");
e.printStackTrace();
try {
connection.close();
} catch (Exception ex) {
System.out.println("error closing connection" + ex.toString());
}
}
}
private void toastMsg(String msg) {
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
}
}
While executing the above code i got connection accept notification dialog on destination device and then notified that peer connection rest at while executing line *cs.connect(hs); in my logcat. Logcat stack trace :
07-11 14:48:07.044: W/System.err(4527): java.io.IOException: Connection reset by peer 07-11 14:48:07.052: W/System.err(4527): at android.bluetooth.BluetoothSocket.readNative(Native Method) 07-11 14:48:07.059: W/System.err(4527): at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:336) 07-11 14:48:07.059: W/System.err(4527): at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:96) 07-11 14:48:07.059: W/System.err(4527): at com.intel.bluetooth.BluetoothStackAndroid.connectionRfRead(BluetoothStackAndroid.java:437) 07-11 14:48:07.059: W/System.err(4527): at com.intel.bluetooth.BluetoothRFCommInputStream.read(BluetoothRFCommInputStream.java:139) 07-11 14:48:07.059: W/System.err(4527): at com.intel.bluetooth.obex.OBEXUtils.readFully(OBEXUtils.java:71) 07-11 14:48:07.059: W/System.err(4527): at com.intel.bluetooth.obex.OBEXSessionBase.readPacket(OBEXSessionBase.java:217) 07-11 14:48:07.059: W/System.err(4527): at com.intel.bluetooth.obex.OBEXClientSessionImpl.connectImpl(OBEXClientSessionImpl.java:100) 07-11 14:48:07.059: W/System.err(4527): at com.intel.bluetooth.obex.OBEXClientSessionImpl.connect(OBEXClientSessionImpl.java:85) 07-11 14:48:07.059: W/System.err(4527): at com.example.bluecovesample.SendFileTask.run(SendFileTask.java:78) 07-11 14:48:07.059: W/System.err(4527): at java.lang.Thread.run(Thread.java:1019)
For some reason, the client is cutting the connection. This could be due to several reasons such as sending wrong data or wrong pairing. Did you make sure you are pairing devices correctly?
Pairing code not being entered could be a issue. This makes the pairing improper.
The fix is to enter Settings -> Wireless & networks -> Bluetooth settings, long press on the "paired" device and select 'Unpair', then single press on the device which produced a 'Bluetooth pairing request' window with textfield, into which I typed the PIN (pairing code). After this was done, pairing will be successful.
You can also use a program called Wireshark to analyze the messages send through the protocol.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With