java pc 蓝牙_java – 通过蓝牙从作为客户端的PC向作为服务器的移动设备发送字符串...

这篇博客讨论了如何通过蓝牙将字符串从Java PC发送到作为服务器的Android设备。文章介绍了使用BlueCove库创建蓝牙服务器和客户端的示例代码,包括服务器监听和接收字符串,以及客户端连接和发送数据。遇到的问题是客户端无法成功连接到服务器,目前尚未找到解决方案。
摘要由CSDN通过智能技术生成

我需要通过蓝牙将字符串从PC传输到Android移动设备来获得帮助. Android移动设备应充当服务器并在设备屏幕上显示字符串消息.作为客户端的PC应该将字符串发送到移动设备.

我希望服务器对提取的字符串做出反应(通过蓝牙传输).这意味着在一侧服务器总是必须监听新的字符串到达​​,但另一方面仍然必须能够对这些消息做出反应(例如,从一个菜单导航到另一个菜单).

我尝试使用BlueCove(2.1.1)作为BluetoothStack(我将BlueCove中的jar作为库添加到两个项目中)并结合我找到的服务器 – 客户端通信示例here.

更新:

由于user_CC使用服务器的RFComm连接,服务器更新了代码:

public class RFCommServer extends Thread{

//based on java.util.UUID

private static UUID MY_UUID = UUID.fromString("446118f0-8b1e-11e2-9e96-0800200c9a66");

// The local server socket

private BluetoothServerSocket mmServerSocket;

// based on android.bluetooth.BluetoothAdapter

private BluetoothAdapter mAdapter;

private BluetoothDevice remoteDevice;

private Activity activity;

public RFCommServer(Activity activity) {

this.activity = activity;

}

public void run() {

BluetoothSocket socket = null;

mAdapter = BluetoothAdapter.getDefaultAdapter();

// Listen to the server socket if we're not connected

while (true) {

try {

// Create a new listening server socket

Log.d(this.getName(), ".....Initializing RFCOMM SERVER....");

// MY_UUID is the UUID you want to use for communication

mmServerSocket = mAdapter.listenUsingRfcommWithServiceRecord("MyService", MY_UUID);

//mmServerSocket = mAdapter.listenUsingInsecureRfcommWithServiceRecord(NAME, MY_UUID); // you can also try using In Secure connection...

// This is a blocking call and will only return on a

// successful connection or an exception

socket = mmServerSocket.accept();

} catch (Exception e) {

}

try {

Log.d(this.getName(), "Closing Server Socket.....");

mmServerSocket.close();

InputStream tmpIn = null;

OutputStream tmpOut = null;

// Get the BluetoothSocket input and output streams

tmpIn = socket.getInputStream();

tmpOut = socket.getOutputStream();

DataInputStream mmInStream = new DataInputStream(tmpIn);

DataOutputStream mmOutStream = new DataOutputStream(tmpOut);

// here you can use the Input Stream to take the string from the client whoever is connecting

//similarly use the output stream to send the data to the client

RelativeLayout layout = (RelativeLayout) activity.findViewById(R.id.relativeLayout_Layout);

TextView text = (TextView) layout.findViewById(R.id.textView_Text);

text.setText(mmInStream.toString());

} catch (Exception e) {

//catch your exception here

}

}

}

从here开始的SPP客户端代码:

/**

* A simple SPP client that connects with an SPP server

*/

public class SampleSPPClient 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 {

SampleSPPClient client=new SampleSPPClient();

//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

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("446118f08b1e11e29e960800200c9a66", false);

System.out.println("\nSearching for service...");

agent.searchServices(null,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

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

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

if(servRecord!=null && servRecord.length>0){

connectionURL=servRecord[0].getConnectionURL(0,false);

}

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

}

为了测试,我使用Galaxy Nexus(GT-I9250)和最新的Android API.

感谢user_CC,客户端和服务器现在无异常地运行.但遗憾的是客户端无法连接到服务器(请参见下面的屏幕截图).这是因为connectionURL永远不会被设置(因此默认情况下它会跳转到(connectionURL == null)).

如何更改客户端代码,以便我实际上可以将其与服务器连接?我需要在以下行中使用正确的connectionURL:

StreamConnection streamConnection=(StreamConnection)Connector.open(connectionURL)

到目前为止,我只发现我需要获取ServiceRecord,遗憾的是,这也没有在here的示例代码中描述.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值