我用Java写了个蓝牙程序,一个客户端和一个服务器端,两台笔记本上都装了蓝牙适配器,并各自运行服务器端和客户端程序,两台蓝牙设备能连接上,只是传输不了数据,各位高手,帮帮小弟解决这个问题
源程序:
服务器端:
mport javax.bluetooth.*;
import javax.microedition.io.*;
import com.intel.bluetooth.DebugLog;import java.io.*;
public class BluetoothServer {
StreamConnection streamConnection = null;
StreamConnectionNotifier streamConnectionNotifier = null; String serviceURL= "btspp://localhost:2D26618601FB47C28D9F10B8EC891363;master=true;authenticate=false;" 
      + "authorize=false;encrypt=false;name=MyBtService";
LocalDevice localDevice = null;

public BluetoothServer()
{
try
{
try
{
localDevice = LocalDevice.getLocalDevice();
localDevice.setDiscoverable(DiscoveryAgent.GIAC);
System.out.println("local device properties: " + localDevice.getFriendlyName() + " " + localDevice.getBluetoothAddress());
streamConnectionNotifier = (StreamConnectionNotifier)Connector.open(serviceURL);
System.out.println("server started : ");
while(true)
{
streamConnection = streamConnectionNotifier.acceptAndOpen();

}




}
catch(Exception e)
{
e.printStackTrace();

}


System.out.println("server: now connect to the remote device");
InputStream in = streamConnection.openInputStream();
while(true)
{
int lengthavai = in.available();
if(lengthavai > 0)
{
byte[] data = new byte[lengthavai];
int length = in.read(data);
System.out.println("client send :" + new String(data));
break;
}
}
try
{
Thread.sleep(2000);
}
catch(Exception e)
{
e.printStackTrace();
}
OutputStream out = streamConnection.openOutputStream();
String serverMessage = "Message from the server";
byte[] data2 = serverMessage.getBytes();
out.write(data2);
in.close();
out.close();
streamConnection.close();

}
catch(Exception ex)
{
ex.printStackTrace();
}
}

public static void main(String[] args) 
{ new BluetoothServer();
}
}客户端:import javax.bluetooth.*;
import javax.bluetooth.UUID;import javax.microedition.io.*;
import java.io.*;
import java.util.*;
import java.util.Vector;
public class BluetoothClient{

ServiceDiscover serviceDiscover = null; public BluetoothClient()
{

serviceDiscover = new ServiceDiscover();

sendData(serviceDiscover.connectionURL);
}

public void sendData(String connectionURL)  //发送数据方法
{
try
{
while(true)
{
StreamConnection connection = (StreamConnection)Connector.open(connectionURL);
System.out.println("client now connect to the remote device");
        OutputStream out = connection.openOutputStream();
String clientMessage = " i am a client ";
byte[] clientData = clientMessage.getBytes();
out.write(clientData);
out.flush();
try
{
Thread.sleep(100);
}
catch(Exception e)
{
e.printStackTrace();
}

InputStream in = connection.openInputStream();
StringBuffer buf = new StringBuffer();
int serverData;
while((serverData = in.read()) != -1)//如果到达流的末尾, 则in.read()方法返回-1
{
buf.append((char)serverData);
}
if(buf.toString() != null)
{
System.out.println("server send: " + buf.toString());
}
else
System.out.println("server didn't send any message!");


in.close();
out.close();
connection.close();
System.exit(0);
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}

public static void main(String[] args)
{
new BluetoothClient();
}



// ***************发现周围蓝牙设备及服务的类*********************//
public class ServiceDiscover implements DiscoveryListener {
DiscoveryAgent discoveryAgent;
private  Vector deviceList = null;


String connectionURL = null;

// UUID[] uuidSet = {new UUID(0x0003)}; //uuid for RFCOMM
UUID[] uuidSet = {new UUID(0x0003)};
int[] attributeSet = {0x0100};
final Object inquiryCompletedEvent = new Object();
final Object serviceSearchCompletedEvent = new Object();
public ServiceDiscover()
{
deviceList = new Vector();
deviceList.clear();
try
{ synchronized(serviceSearchCompletedEvent)
{
LocalDevice localDevice = LocalDevice.getLocalDevice();
System.out.println("local device:   " + localDevice.getFriendlyName() + "  " + localDevice.getBluetoothAddress());
discoveryAgent= localDevice.getDiscoveryAgent();
System.out.println("searching for remote device in the vicinity....");
discoveryAgent.startInquiry(DiscoveryAgent.GIAC, this);
//inquiryCompletedEvent.wait();
serviceSearchCompletedEvent.wait();
}
}
catch(Exception e)
{
e.printStackTrace();
}

}

public synchronized void deviceDiscovered(RemoteDevice remoteDevice, DeviceClass cod)//指出是否发现设备
{ deviceList.add(remoteDevice);
try
{
System.out.println("remote device name:   " + remoteDevice.getFriendlyName(false) + "\n"
+ "remote device address :   " + remoteDevice.getBluetoothAddress());
//synchronized(this)
// {
if((remoteDevice.getFriendlyName(false)).equals("SUMANG-PC"))
//此处的SUMANG-PC是运行服务器端的蓝牙设备名字

{
discoveryAgent.searchServices(attributeSet, uuidSet, remoteDevice, this);
}
// }
}
catch(Exception e)
{
e.printStackTrace();
}
}
public synchronized void  inquiryCompleted(int discType)//指出请求是否已经成功
{ }

public synchronized void servicesDiscovered(int tranID, ServiceRecord[] serviceRecord)//指出是否发现有服务
{
for(int i = 0; i < serviceRecord.length; i ++)
{
connectionURL = serviceRecord[i].getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);
if(connectionURL== null)
continue;

DataElement serviceNameElement = serviceRecord[i].getAttributeValue(0x0100);
String serviceName = (String)serviceNameElement.getValue();
if(serviceName != null)
{
System.out.println("service : " + serviceName + "found " + connectionURL);
}
else
{
System.out.println("service fonud " + connectionURL);
}
}

}
public void serviceSearchCompleted(int tranID, int respCode)//服务发现是否已经完成
{
synchronized(serviceSearchCompletedEvent)
{
serviceSearchCompletedEvent.notifyAll();
}
}


}
}