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

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 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退
  • ¥20 win系统的PYQT程序生成的数据如何放入云服务器阿里云window版?
  • ¥50 invest生境质量模块