Bluetooth PAN ネットワーク経由で接続されている 3 つのデバイスがあります。
- デバイス 1 : サーバー - 私の場合、サーバーは EV3 LEGO ブロック == ロボットです!
- デバイス 2 : リモート - 2 番目のデバイス (Android アプリ) は、デバイス 1 のアクションを制御するために使用する必要があります。
- デバイス 3 : フロントエンド - 3 番目のデバイスは、選択したアクションを表示する必要があります (Android)
可能な通信方式はBluetoothとJAVAでのソケット接続です。すでに DEVICE 2 から DEVICE 1 を制御できますが、コマンドは DEVICE 3 に中継されません。これは、サーバーに使用しているコードです。
主要
try {
serverSocket = new ServerSocket( 1111 );
} catch (IOException e) {
e.printStackTrace();
}
while (true) {
try {
socket = serverSocket.accept();
} catch (IOException e) {
System.out.println("I/O error: " + e);
}
// new thread for a client
new RelayThread(socket).start();
}
リレースレッド THREAD
public class RelayThread extends Thread {
protected Socket socket;
BufferedReader bufferedReader;
public RelayThread (Socket clientSocket) {
this.socket = clientSocket;
}
public void run() {
Singleton motors = Singleton.getInstance();
InputStream inp = null;
BufferedReader brinp = null;
DataOutputStream out = null;
try {
inp = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(inp, "UTF-8");
bufferedReader = new BufferedReader(isr);
out = new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
return;
}
while (true) {
try {
String command= bufferedReader.readLine();
if ((command== null) || command.equalsIgnoreCase("QUIT")) {
socket.close();
return;
}
else {
// do ROBOT actions
/*
* SERVER ACTIONS
*/
// notify the other client of the delivered LINE
out.writeBytes(command);
out.flush();
}
} catch (IOException e) {
e.printStackTrace();
return;
}
}
}
}
現在、デバイス 3 として TCP クライアントを使用していますが、デバイス 2 経由でコマンドを送信してもテキストが表示されません。どうすれば自分のプロジェクトを実現できますか?何が間違っているのでしょうか?