udp接收广播并连接发送数据

先说下实现效果和背景。软件在启动后,准备接收硬件的广播信号,与新风硬件绑定,握手。然后,实现软件和硬件的点对点的通信。

private int udpPort = 5668; //硬件那说好的端口
private InetAddress group;
private MulticastSocket socket;
private DatagramPacket packet;
byte[] buf = new byte[1024];


static InetAddress inetAddress = null;

private boolean isHasIntenet = false;//用来标记当前是否有网络

然后:

public void onCreate(Bundle savedInstanceState) {

//首先一个线程,先看有没有连接网络,如果没有连接网络肯定就没必要接收广播,没有发送消息的必要了
    new Thread() {
        public void run() {
                try {
                Thread.sleep(5000);
                    final String current_ssid = WifiUtility
                        .get_connected_ssid().replace("\"", "");

    //wifi是否能有连接上
        if (current_ssid != null && current_ssid.length() > 0) {
final String current_ip = WifiUtility.get_wifi_ip();
// 有网再发送
isHasIntenet = true;
new MulReceiverIP().start();

                        }


            } catch (Exception e) {


            }

        }
    }.start();


    res = getActivity().getResources();
    super.onCreate(savedInstanceState);

    }

//这就是接收广播的地方

public class MulReceiverIP extends Thread {


    public MulReceiverIP() {
        try {
            socket = new MulticastSocket(udpPort);
            group = InetAddress.getByName("230.0.0.0");
            socket.joinGroup(group);
            packet = new DatagramPacket(buf, buf.length);


        } catch (IOException e) {
            e.printStackTrace();
    }

}


public void run() {


    while (!exitThread) {


                        try {
                            socket.receive(packet);


                            } catch (IOException e) {
                    e.printStackTrace();
        }


        inetAddress = packet.getAddress();

        String message = new String(packet.getData(), 0,
        packet.getLength());


        chargeUdpMessage(message);//写个方法,来处理服务器来的数据
        }
    }


}

//操作服务器端的数据

private void chargeUdpMessage(String udpMsg) {


        String info = (String) udpMsg;
        if (info.contains("Lu_Ca")) {// 叫我呢
            Log.i("I'm here", "I'm here" + info + "进入呼叫");

            sendUDPMessage("I'm here");//回应服务器我在,可以发送数据
        } else if (info.contains("wind0")) {//如果服务器端来的数据中有wind0,表示控制风速为0挡
            Message m = new Message();
            m.what = 0;
            ControlFragment.h.sendMessage(m);
        } else if (info.contains("wind1")) {//如果服务器端来的数据中有wind1,表示控制风速为1挡
            Message m = new Message();
            m.what = 1;
            ControlFragment.h.sendMessage(m);
        } else if (info.contains("wind2")) {//如果服务器端来的数据中有wind2,表示控制风速为2挡
            Message m = new Message();
            m.what = 2;
            ControlFragment.h.sendMessage(m);
        } else if (info.contains("wind3")) {//如果服务器端来的数据中有wind3,表示控制风速为3挡
            Message m = new Message();
            m.what = 3;
            ControlFragment.h.sendMessage(m);
        }

}



// 发送 udp message


private void sendUDPMessage(String message) {

    //有地址才能发送,不然没有地址,发送就崩溃
    if (inetAddress == null) {
        return;
        }


    int message_length = message.length();
    byte[] messageByte = message.getBytes();


    DatagramPacket p = new DatagramPacket(messageByte, message_length,
    inetAddress, udpPort);


    try {
        socket.send(p);


        } catch (IOException e) {
    // TODO Auto-generated catch block
        e.printStackTrace();
        }
}



//到主线程更改ui界面显示

public static Handler h = new Handler() {
    public void handleMessage(Message msg) {


            if (msg.what == 0)// 接收关闭新风

            {

                wind_speed_image

                    .setBackground(res

        .getDrawable(R.drawable.new_wind_speed_close_image_new));


    return;

        } else if (msg.what == 1)// 接收新风低风

        {

            wind_speed_image.setBackground(res

.getDrawable(R.drawable.new_wind_speed_low_image_new));

            return;

        } else if (msg.what == 2)// 接收新风中风
        {
            wind_speed_image
            .setBackground(res
    .getDrawable(R.drawable.new_wind_speed_middle_image_new));
        return;
        } else if (msg.what == 3)// 接收新风高风
        {
            wind_speed_image
            .setBackground(res
    .getDrawable(R.drawable.new_wind_speed_heigh_image_new));
            return;
        }
    }
};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值