在接收数据时在UDP上广播

时间:2017-10-24 13:54:19

标签: android multithreading sockets

在同一端口上从其他设备接收数据时,是否有可能在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()时,它会停止从其他设备接收数据,所以它现在只发送消息但停止从其他设备接收消息。

这个问题有什么好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

这是解决方案 https://stackoverflow.com/a/25520279/1088975

我只改变了

System.log...

Log.w(TAG, "Message...");

我改变IP总是" 255.255.255.255"而不是

getBroadcastAddress()

返回当前WIFI的广播IP,这对我的Android设备无效