2013-05-30 27 views
8

Tôi đang sử dụng Windows 7 PC làm Máy chủ. Mã số:Kiểm tra xem SPP UUID 00001101-0000-1000-8000-00805F9B34FB tồn tại trên máy chủ

public class PCSPPServer { 
    //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()); 

     PCSPPServer sampleSPPServer=new PCSPPServer(); 
     sampleSPPServer.startServer(); 

    } 
} 

Và HTC Desire as Client. Code:

public class MainActivity extends Activity { 

    TextView out; 
    private static final int REQUEST_ENABLE_BT = 1; 
    private BluetoothAdapter btAdapter = null; 
    private BluetoothSocket btSocket = null; 
    private OutputStream outStream = null; 

    // Well known SPP UUID 
    private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); 

    // Insert your server's MAC address 
    private static String address = "00:15:83:0C:BF:EB"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     out = (TextView) findViewById(R.id.out); 

     out.append("\n...In onCreate()..."); 

     btAdapter = BluetoothAdapter.getDefaultAdapter(); 
     CheckBTState(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    @Override 
     public void onStart() { 
     super.onStart(); 
     out.append("\n...In onStart()..."); 
     } 

     @Override 
     public void onResume() { 
     super.onResume(); 

     out.append("\n...In onResume...\n...Attempting client connect..."); 

     // Set up a pointer to the remote node using it's address. 
     BluetoothDevice device = btAdapter.getRemoteDevice(address); 

     // Two things are needed to make a connection: 
     // A MAC address, which we got above. 
     // A Service ID or UUID. In this case we are using the 
     //  UUID for SPP. 
     try { 
      btSocket = device.createRfcommSocketToServiceRecord(MY_UUID); 
     } catch (IOException e) { 
      AlertBox("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + "."); 
     } 

     // Discovery is resource intensive. Make sure it isn't going on 
     // when you attempt to connect and pass your message. 
     btAdapter.cancelDiscovery(); 

     // Establish the connection. This will block until it connects. 
     try { 
      btSocket.connect(); 
      out.append("\n...Connection established and data link opened..."); 
     } catch (IOException e) { 
      try { 
      btSocket.close(); 
      } catch (IOException e2) { 
      AlertBox("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + "."); 
      } 
     } 

     // Create a data stream so we can talk to server. 
     out.append("\n...Sending message to server..."); 

     try { 
      outStream = btSocket.getOutputStream(); 
     } catch (IOException e) { 
      AlertBox("Fatal Error", "In onResume() and output stream creation failed:" + e.getMessage() + "."); 
     } 

     String message = "Hello from Android.\n"; 
     byte[] msgBuffer = message.getBytes(); 
     try { 
      outStream.write(msgBuffer); 
     } catch (IOException e) { 
      String msg = "In onResume() and an exception occurred during write: " + e.getMessage(); 
      if (address.equals("00:00:00:00:00:00")) 
      msg = msg + ".\n\nUpdate your server address from 00:00:00:00:00:00 to the correct address on line 37 in the java code"; 
      msg = msg + ".\n\nCheck that the SPP UUID: " + MY_UUID.toString() + " exists on server.\n\n"; 

      AlertBox("Fatal Error", msg);  
     } 
     } 

     @Override 
     public void onPause() { 
     super.onPause(); 

     out.append("\n...In onPause()..."); 

     if (outStream != null) { 
      try { 
      outStream.flush(); 
      } catch (IOException e) { 
      AlertBox("Fatal Error", "In onPause() and failed to flush output stream: " + e.getMessage() + "."); 
      } 
     } 

     try  { 
      btSocket.close(); 
     } catch (IOException e2) { 
      AlertBox("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + "."); 
     } 
     } 

     @Override 
     public void onStop() { 
     super.onStop(); 
     out.append("\n...In onStop()..."); 
     } 

     @Override 
     public void onDestroy() { 
     super.onDestroy(); 
     out.append("\n...In onDestroy()..."); 
     } 

     private void CheckBTState() { 
     // Check for Bluetooth support and then check to make sure it is turned on 

     // Emulator doesn't support Bluetooth and will return null 
     if(btAdapter==null) { 
      AlertBox("Fatal Error", "Bluetooth Not supported. Aborting."); 
     } else { 
      if (btAdapter.isEnabled()) { 
      out.append("\n...Bluetooth is enabled..."); 
      } else { 
      //Prompt user to turn on Bluetooth 
      Intent enableBtIntent = new Intent(btAdapter.ACTION_REQUEST_ENABLE); 
      startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); 
      } 
     } 
     } 

     public void AlertBox(String title, String message){ 
     new AlertDialog.Builder(this) 
     .setTitle(title) 
     .setMessage(message + " Press OK to exit.") 
     .setPositiveButton("OK", new OnClickListener() { 
      public void onClick(DialogInterface arg0, int arg1) { 
       finish(); 
      } 
     }).show(); 
     } 
    } 

Tôi đã thử nó trên cả hai Windows 732bit & 64bit. Tôi đang sử dụng HTC Desire Android v2.3.3.

Khi tôi cố gắng kết nối các khách hàng đến máy chủ và cố gắng viết bất kỳ văn bản sử dụng OutputStream, tôi nhận được lỗi:

Check that the SPP UUID 00001101-0000-1000-8000-00805F9B34FB exists on server


Ngoài ra tôi thêm một thiết bị Bluetooth mới trên máy tính của tôi.

Bluetooth Thông tin thiết bị:

Manufacturer: Cambridge Silicon Radio Ltd Driver Provider: Microsoft

Xem một số thông tin trong hình ảnh này: enter image description here

Hãy cho tôi biết nếu có ai có một ý tưởng!

+0

bạn có giải quyết vấn đề này không? – benoffi7

+0

@ benoffi7 có, câu trả lời đã giải quyết được vấn đề của tôi. – csharpbd

Trả lời

4

sử dụng DataOutputStream để viết. Hãy thử cách này:

DataOutputStream dos; 
try { 
    //outStream = btSocket.getOutputStream(); 
    dos = new DataOutputStream(btSocket.getOutputStream()); 
} catch (IOException e) { 
    AlertBox("Fatal Error", "In onResume() and output stream creation failed:" + e.getMessage() + "."); 
} 

//String message = "Hello from Android.\n"; 
//byte[] msgBuffer = message.getBytes(); 
try { 
    //outStream.write(msgBuffer); 
    dos.writeChar('H'); 
    dos.writeChar('i'); 
} catch (IOException e) { 
    String msg = "In onResume() and an exception occurred during write: " + e.getMessage(); 
    if (address.equals("00:00:00:00:00:00")) 
     msg = msg + ".\n\nUpdate your server address from 00:00:00:00:00:00 to the correct address on line 37 in the java code"; 

    msg = msg + ".\n\nCheck that the SPP UUID: " + MY_UUID.toString() + " exists on server.\n\n"; 

    AlertBox("Fatal Error", msg); 
} 
+0

Không làm việc mã này – benoffi7

+0

Tôi mệt mỏi cùng một điều nhưng nó cho tôi lỗi tương tự. – Pooja

Các vấn đề liên quan