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

来源:互联网 发布:org.apache导入 编辑:程序博客网 时间:2024/06/06 08:56

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

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 messageprivate 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;        }    }};