0
同じポート上の他のデバイスからデータを受信している間にUDPポートでブロードキャストメッセージを送信する良いオプションはありますか? 私は現在、これを持っている:データを受信中にUDPでブロードキャストする
まず、私は読書と送信の両方のための1 DiagramSocket初期化:私は実行する場合
public class Server implements Runnable {
public Server(iBroadcastResponse iBResponse){
BroadcastClass.this.iBResponse = iBResponse;
}
@Override
public void run() {
startSocket();
while (DataHandler.isEmergencyMode.get()) {
try {
byte[] buf = new byte[256];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
if(socket == null)
return;
socket.receive(packet);
String command = stringFromPacket(packet);
Log.d(TAG, command);
addToBroadcastCalls(command);
if(iBResponse != null)
iBResponse.onResponse();
} catch (Exception e) {
Log.e(TAG, "Server: Error!\n");
}
}
Log.e(TAG, "Stop!");
}
String stringFromPacket(DatagramPacket packet) {
return new String(packet.getData(), 0, packet.getLength());
}
}
:私は現在のソケットのための受信/読んでいる最初のスレッドで
private void startSocket(){
try {
if(socket == null) {
socket = new DatagramSocket(3040);
socket.setBroadcast(true);
socket.setReuseAddress(true);
}
} catch (Exception e) {
e.printStackTrace();
}
}
をこれは正常に動作し、受信データを読み取ります。私は別のスレッドでデータを送信しようとした場合でも:.send()が呼び出されると
socketThread = new Thread(){
@Override
public void run() {
startSocket();
String message = "Message";
byte[] buf = message.getBytes();
DatagramPacket packet = new DatagramPacket(buf, buf.length);
try {
if(!socket.isConnected())
socket.connect(InetAddress.getByName("255.255.255.255"), 3040);
if (socket != null) {
socket.send(packet);
}
Log.d(TAG, "Send: " +message);
} catch (Exception e) {
e.printStackTrace();
}
}
};
socketThread.start();
それはそれだけでメッセージを送信し、今ので、他のデバイスからのデータの受信を停止するが、他のデバイスからの受信を停止します。
この問題の解決策はありますか?