package bluetoothSniffer; public class BTTestClass { static String addressString; // IP address to connect to static int addressPort; // port to connect to static BTSnifferThread mySniffer; // thread to start running public static void main(String argv[]){ // we need two arguments: if (argv.length < 2) { System.out.println("invocation: BTTestClass addressString, portNumber"); System.exit(0); } else { addressString = new String(argv[0]); addressPort = Integer.parseInt(argv[1]); mySniffer = new BTSnifferThread(addressString, addressPort); mySniffer.start(); } while (mySniffer.isAlive()) { // twiddle your thumbs. } System.exit(0); } } package bluetoothSniffer; import java.net.*; import java.io.*; class BTSnifferThread extends Thread { Socket s; // connection to Lantronix device private BufferedReader networkIn; // text in from socket private PrintWriter networkOut; // text out to socket String someText; // for reading string in from socket private String addressString; // address to connect to private int addressPort; // port to connect to private boolean btReady; // if the BT dongle can take a command or not BufferedReader localIn; // input from keyboard BTSnifferThread(String _addressString, int _addressPort) { // put parameters in local variables, open local input stream: addressString = _addressString; addressPort = _addressPort; localIn = new BufferedReader(new InputStreamReader(System.in)); } public void run() { try { // open socket to Lantronix device: s = new Socket(addressString, addressPort); System.out.println("Connection accepted"); // set up input and output streams from socket: networkIn = new BufferedReader( new InputStreamReader(s.getInputStream())); networkOut = new PrintWriter(s.getOutputStream()); // clear output buffer: networkOut.flush(); } catch(IOException e) {System.out.println(e);} // send an initial info query, to see that the BT dongle is alive: this.getBTInfo(); // repeat until socket is closed: while(!s.isClosed()) { try { // read in a line at a time: someText = networkIn.readLine(); System.out.println(someText); // if BT dongle says "OK", then // it's ready to accept another command: if (someText.equals("OK")) { this.setBtReady(true); } //if BT dongle is doing nothing, scan for new devices: if (this.isBtReady()) { this.startBTInquiry(); } } catch(IOException e){ System.out.println(e); } } } public void kill() { // close socket if it's still open: if (!s.isClosed()) { try { s.close(); } catch(IOException e) {System.out.println(e);} } } public void getBTInfo () { // if the socket's open, send the BT dongle info string: if (!s.isClosed()) { networkOut.print("AT+BTINFO?\r\n"); networkOut.flush(); setBtReady(false); } } public void startBTInquiry() { // if the socket's open, send the BT dongle inquiry string: if (!s.isClosed()) { networkOut.print("AT+BTINQ?\r\n"); networkOut.flush(); setBtReady(false); } } protected boolean isBtReady() { return btReady; } protected void setBtReady(boolean btReady) { this.btReady = btReady; } }