|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2007
Messaggi: 87
|
rxtx bluetooth usb
salve,
lavoro su una ubuntu 8.04/8.10, non credo fa differenza, sto cercando di sviluppare [per uso principalemnte personale] un programma in java che scambia stringhe tra pc e cellulare via bluetooth. ho trovato degli ottimi esempi in rete che usano le librerie rxtx. questo è il codice del server: Codice:
package sbs;
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import gnu.io.UnsupportedCommOperationException;
import java.awt.BorderLayout;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.LocalDevice;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
import javax.microedition.io.StreamConnectionNotifier;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class Server implements SerialPortEventListener {
public static final String UUID_STRING = "75AE3BD652FD4A96AEF98FEEE8DB2395";
public static final String SERVICE_NAME = "SBTCommand";
private StreamConnectionNotifier server;
JFrame jframe;
JTextArea textArea;
public Server() {
}
SerialPort sp;
static InputStream spIs;
static OutputStream spOs;
// Static for the moment - one server at a time
static InputStream is;
static OutputStream os;
private int connectLocalSerial() {
int result = -1;
try {
String portStr = "/dev/rfcomm0";
System.out.println("Info: trying to open " + portStr);
CommPortIdentifier portIdentifier;
portIdentifier = CommPortIdentifier.getPortIdentifier(portStr);
if (portIdentifier.isCurrentlyOwned()) {
logMessage("Error: Port is currently in use");
} else {
CommPort commPort = portIdentifier.open(getClass().getName(),
2000);
if (commPort instanceof SerialPort) {
SerialPort serialPort = (SerialPort) commPort;
sp = serialPort;
serialPort.setSerialPortParams(115200, 8, 1, 0);
spIs = sp.getInputStream();
spOs = sp.getOutputStream();
logMessage("opened");
result = 0;
} else {
sp = null;
spIs = null;
spOs = null;
System.out
.println("Error: Only serial ports are handled by this example.");
}
}
} catch (NoSuchPortException e) {
e.printStackTrace();
} catch (PortInUseException e) {
e.printStackTrace();
} catch (UnsupportedCommOperationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
public void doWork() {
this.jframe = new JFrame("BT Server");
this.jframe.setLayout(new BorderLayout());
this.textArea = new JTextArea(6, 20);
this.textArea.setVisible(true);
JScrollPane jsp = new JScrollPane(this.textArea);
this.jframe.add(jsp, BorderLayout.CENTER);
this.jframe.pack();
this.jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.jframe.setVisible(true);
startServer();
}
public void logMessage(String message) {
this.textArea.setText(this.textArea.getText() + message + "\n");
this.textArea.setCaretPosition(this.textArea.getText().length());
textArea.repaint();
System.out.println(message);
}
public void startServer() {
LocalDevice local;
try {
local = LocalDevice.getLocalDevice();
local.setDiscoverable(DiscoveryAgent.GIAC);
this.logMessage("max of "
+ LocalDevice
.getProperty("bluetooth.connected.devices.max")
+ " connection(s) supported");
String url = "btspp://localhost:" + UUID_STRING + ";name="
+ SERVICE_NAME;
server = (StreamConnectionNotifier) Connector.open(url);
this.logMessage("waiting for connection...");
StreamConnection conn = server.acceptAndOpen();
this.logMessage("connection opened");
connectLocalSerial();
is = conn.openInputStream();
os = conn.openOutputStream();
sp.addEventListener(this);
sp.notifyOnDataAvailable(true);
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
byte buffer[] = new byte[1000];
boolean c = true;
while (c) {
try {
if (is.available() > 0) {
int numChars = is.read(buffer);
String s = new String(buffer);
logMessage("received from mobile phone: "
+ s.substring(0, numChars));
spOs.write(buffer, 0, numChars);
} else {
Thread.sleep(10);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
c = false;
}
}
}
});
} catch (Exception e) {
this.logMessage(e.getMessage());
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
private Server svr;
public void run() {
svr=new Server();
svr.doWork();
}
});
}
public void serialEvent(SerialPortEvent arg0) {
// arg
if (arg0.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
byte[] buffer = new byte[1000];
try {
while (spIs.available() > 0) {
int numChars = spIs.read(buffer);
if (numChars > 0) {
String s = new String(buffer);
// logMessage("sent to mobile phone: " + s.substring(0, numChars));
os.write(buffer, 0, numChars);
}
}
} catch (IOException e) {
}
}
}
}
è possibile che sia sbagliata la porta seriale su cui cerco di attivare il server? Codice:
String portStr = "/dev/rfcomm0"; per ora uso una pennina bluetooth usb dikom. grazie. |
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:38.


















