javabluetoothbluecove

error with bluecove library in java


i want to write a simple server and client in JAVA that exchange string over bluetooth (i want to send string from laptop A to laptop B which both have windows 7 64 bit). after some googling, i found the bluecove java library. based on the example here

i wrote this code for my server and its run with out problem but i have issues with client. when i want to run client, i get this error

BlueCove version 2.1.1-SNAPSHOT on winsock java.lang.ClassCastException: com.intel.bluetooth.BluetoothRFCommConnectionNotifier cannot be cast to javax.microedition.io.StreamConnection at bluetooch.Main.main(Main.java:84)

this is my server:

package MainPackage;

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) {

    try {
        //display local device address and name
        LocalDevice localDevice = LocalDevice.getLocalDevice();
        System.out.println("Address: "+localDevice.getBluetoothAddress());
        System.out.println("Name: "+localDevice.getFriendlyName());
        System.out.println("localDevice.getDiscoverable() " + localDevice.getDiscoverable());

        System.out.println("bluetooth is discoverable " + localDevice.setDiscoverable(DiscoveryAgent.LIAC));
        BluetoothServer sampleSPPServer=new BluetoothServer();
        sampleSPPServer.startServer();

    } catch (Exception e) {

        e.printStackTrace();
    } 

}

}

and this is client

package bluetooch;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.Vector;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;

public class Main {

public static final Vector devicesDiscovered = new Vector();
public static void main(String[] args){

    try {            


            StreamConnection streamConnection =        (StreamConnection)Connector.open("btspp://localhost:" + "1101" +";name=Sample  SPP Server");      
            //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);



        Scanner keyboard = new Scanner(System.in);
        System.out.println("enter an integer");
        int myint = keyboard.nextInt();

    } catch (Exception e) {
        System.out.println("Error Occured! below is the message\r\n" + e.getMessage());
    }
}

}

any idea about this problem ?


Solution

  • Well, the message says it all.

    You're casting the Connection returned by Connector.open() to StreamConnection.

    But the returned connection is not an instance of StreamConnection. It's an instance of com.intel.bluetooth.BluetoothRFCommConnectionNotifier which, if you read the javadoc or source code, implements StreamConnectionNotifier, but not StreamConnection.