ilike_ly 2016-07-19 03:15 采纳率: 0%
浏览 6631

udp广播问题,发送广播后,接收端不能实时接收广播,经常接收不到数据

 public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new Thread(new Runnable() {
            @Override
            public void run() {
                createUDP();
            }
        }).start();
        findViewById(R.id.server).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                execuBroadCast();
            }
        });

        findViewById(R.id.client).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                acceptBroadCast();
            }
        });
    }

    //广播接收
        MulticastSocket multicastSocket1 = null;
        InetAddress inetAddress1 = null;
        String str="";

    private void acceptBroadCast() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    multicastSocket1 = new MulticastSocket(BROADCAST_PORT);
                    inetAddress1 = InetAddress.getByName(BROADCAST_IP);
                    multicastSocket1.joinGroup(inetAddress1);
                    byte buf[] = new byte[1024];
                    DatagramPacket dp = null;
                    dp = new DatagramPacket(buf, buf.length, inetAddress1,BROADCAST_PORT);
                    while (true) {
                        multicastSocket1.receive(dp);
                        str = new String(buf, 0, dp.getLength());
                        Log.d("=========", str);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }


    //广播发送
        InetAddress inetAddress = null;
        MulticastSocket multicastSocket = null;
        private static int BROADCAST_PORT = 9899;
        private static String BROADCAST_IP = "224.0.0.1";

        private void createUDP(){
            try {
                inetAddress = InetAddress.getByName(BROADCAST_IP);
                multicastSocket = new MulticastSocket(BROADCAST_PORT);
                multicastSocket.setTimeToLive(1);
                multicastSocket.joinGroup(inetAddress);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        private void execuBroadCast() {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    DatagramPacket dataPacket = null;
                    byte[] data = "hello".getBytes();
                    dataPacket = new DatagramPacket(data, data.length, inetAddress,BROADCAST_PORT);
                    try {
                        multicastSocket.send(dataPacket);
                        System.out.println("ggggggggggggggggg");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }


}

  • 写回答

1条回答

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题