I've got 2 classes. A bluetooth client class which will be run on my laptop and a bluetooth server class which will be run on a pc. Apparently, I keep having this error and I could use some help...
Exception in thread "main" java.io.IOException: Can't query remote device
BlueCove stack shutdown completed
at com.intel.bluetooth.RemoteDeviceHelper.getFriendly Name(RemoteDeviceHelper.java:404)
at javax.bluetooth.RemoteDevice.getFriendlyName(Remot eDevice.java:130)
at com.main.BluetoothClient.main(BluetoothClient.java :75)
package com.main; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.Vector; import javax.bluetooth.DataElement; import javax.bluetooth.DeviceClass; import javax.bluetooth.DiscoveryAgent; import javax.bluetooth.DiscoveryListener; import javax.bluetooth.LocalDevice; import javax.bluetooth.RemoteDevice; import javax.bluetooth.ServiceRecord; import javax.bluetooth.UUID; import javax.microedition.io.Connector; import javax.microedition.io.StreamConnection; /** * A simple SPP client that connects with an SPP server */ public class BluetoothClient implements DiscoveryListener{ //object used for waiting private static Object lock=new Object(); //vector containing the devices discovered private static Vector vecDevices=new Vector(); private static String connectionURL=null; public static void main(String[] args) throws IOException { BluetoothClient client=new BluetoothClient(); //display local device address and name LocalDevice localDevice = LocalDevice.getLocalDevice(); System.out.println("Address: "+localDevice.getBluetoothAddress()); System.out.println("Name: "+localDevice.getFriendlyName()); //find devices DiscoveryAgent agent = localDevice.getDiscoveryAgent(); System.out.println("Starting device inquiry..."); agent.startInquiry(DiscoveryAgent.GIAC, client); try { synchronized(lock){ lock.wait(); } } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Device Inquiry Completed. "); //print all devices in vecDevices int deviceCount=vecDevices.size(); if(deviceCount <= 0){ System.out.println("No Devices Found ."); System.exit(0); } else{ //print bluetooth device addresses and names in the format [ No. address (name) ] System.out.println("Bluetooth Devices: "); for (int i = 0; i <deviceCount; i++) { RemoteDevice remoteDevice=(RemoteDevice)vecDevices.elementAt(i); System.out.println((i+1)+". "+remoteDevice.getBluetoothAddress()+" ("+remoteDevice.getFriendlyName(true)+")"); } } System.out.print("Choose Device index: "); BufferedReader bReader=new BufferedReader(new InputStreamReader(System.in)); String chosenIndex=bReader.readLine(); int index=Integer.parseInt(chosenIndex.trim()); //check for spp service RemoteDevice remoteDevice=(RemoteDevice)vecDevices.elementAt(index-1); UUID[] uuidSet = new UUID[1]; uuidSet[0]=new UUID("1101",true); int[] attrSet={0x1101}; System.out.println("\nSearching for service..."); agent.searchServices(attrSet,uuidSet,remoteDevice,client); try { synchronized(lock){ lock.wait(); } } catch (InterruptedException e) { e.printStackTrace(); } if(connectionURL==null){ System.out.println("Device does not support Simple SPP Service."); System.exit(0); } //connect to the server and send a line of text try{ StreamConnection streamConnection=(StreamConnection)Connector.open(connectionURL); //send string OutputStream outStream=streamConnection.openOutputStream(); PrintWriter pWriter=new PrintWriter(new OutputStreamWriter(outStream)); pWriter.write("Test String from SPP Client\r\n"); pWriter.flush(); //read response InputStream inStream=streamConnection.openInputStream(); BufferedReader bReader2=new BufferedReader(new InputStreamReader(inStream)); String lineRead=bReader2.readLine(); System.out.println(lineRead); }catch(Exception e){ //e.printStackTrace(); } }//main //methods of DiscoveryListener public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) { //add the device to the vector if(!vecDevices.contains(btDevice)){ vecDevices.addElement(btDevice); } } //implement this method since services are not being discovered public void servicesDiscovered(int transID, ServiceRecord[] servRecord) { System.out.println("Inside Service Discovered"); if(servRecord!=null && servRecord.length>0){ connectionURL=servRecord[0].getConnectionURL(0,false); for (int i = 0; i < servRecord.length; i++) { DataElement serviceName = servRecord[i].getAttributeValue(0x0100); System.out.println("service " + serviceName.getValue() + " found "); } /* for (int i = 0; i < servRecord.length; i++) { String url = servRecord[i].getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false); // System.out.println("Connection URL="+url); if (url == null) { continue; } // serviceFound.add(url); DataElement serviceName = servRecord[i].getAttributeValue(0x0100); if (serviceName != null) { System.out.println("service " + serviceName.getValue() + " found " + url); // if(serviceName.getValue().equals("OBEX Object Push")){ // sendMessageToDevice(url); //} } else { System.out.println("service found " + url); } }*/ } synchronized(lock){ lock.notify(); } } //implement this method since services are not being discovered public void serviceSearchCompleted(int transID, int respCode) { synchronized(lock){ lock.notify(); } } public void inquiryCompleted(int discType) { synchronized(lock){ lock.notify(); } }//end method }
package com.main; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import javax.bluetooth.*; import javax.microedition.io.*; /** * Class that implements an SPP Server which accepts single line of * message from an SPP client and sends a single line of response to the client. */ public class BluetoothServer { //start server private void startServer() throws IOException{ //Create a UUID for SPP UUID uuid = new UUID("1101", true); //Create the servicve url String connectionString = "btspp://localhost:" + uuid +";name=Sample SPP Server"; //open server url StreamConnectionNotifier streamConnNotifier = (StreamConnectionNotifier)Connector.open( connectionString ); //Wait for client connection System.out.println("\nServer Started. Waiting for clients to connect..."); StreamConnection connection=streamConnNotifier.acceptAndOpen(); RemoteDevice dev = RemoteDevice.getRemoteDevice(connection); System.out.println("Remote device address: "+dev.getBluetoothAddress()); System.out.println("Remote device name: "+dev.getFriendlyName(true)); //read string from spp client InputStream inStream=connection.openInputStream(); BufferedReader bReader=new BufferedReader(new InputStreamReader(inStream)); String lineRead=bReader.readLine(); System.out.println(lineRead); //send response to spp client OutputStream outStream=connection.openOutputStream(); PrintWriter pWriter=new PrintWriter(new OutputStreamWriter(outStream)); pWriter.write("Response String from SPP Server\r\n"); pWriter.flush(); pWriter.close(); streamConnNotifier.close(); } public static void main(String[] args) throws IOException { //display local device address and name LocalDevice localDevice = LocalDevice.getLocalDevice(); System.out.println("Address: "+localDevice.getBluetoothAddress()); System.out.println("Name: "+localDevice.getFriendlyName()); BluetoothServer sampleSPPServer=new BluetoothServer(); sampleSPPServer.startServer(); } }