在同一端口上从其他设备接收数据时,是否有可能在UDP端口上发送广播消息? 我现在有这个:
首先,我为读取和发送初始化1个DiagramSocket:
add(TimeStamped t, T data)
在第一个线程中,我有读取/接收当前套接字:
private void startSocket(){
try {
if(socket == null) {
socket = new DatagramSocket(3040);
socket.setBroadcast(true);
socket.setReuseAddress(true);
}
} catch (Exception e) {
e.printStackTrace();
}
}
如果我运行它,它会正常工作,读取接收数据。但是,如果我尝试在另一个线程中发送数据:
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());
}
}
当调用.send()时,它会停止从其他设备接收数据,所以它现在只发送消息但停止从其他设备接收消息。
这个问题有什么好的解决方案吗?
答案 0 :(得分:0)
这是解决方案 https://stackoverflow.com/a/25520279/1088975
我只改变了
System.log...
要
Log.w(TAG, "Message...");
我改变IP总是" 255.255.255.255"而不是
getBroadcastAddress()
返回当前WIFI的广播IP,这对我的Android设备无效