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; } }};
阅读全文
0 0
- udp接收广播并连接发送数据
- 发送UDP广播并接收数据
- iphone发送udp广播并接收数据
- ios开发之发送UDP广播并接收数据
- ios开发之发送UDP广播并接收数据
- ios开发之发送UDP广播并接收数据
- ios开发之发送UDP广播并接收数据
- ios开发之发送UDP广播并接收数据
- udp广播发送数据
- udp发送接收数据
- C# UDP 接收客户端指令并发送数据
- UDP协议发送、接收广播包 .
- Android发送和接收UDP广播
- 局域网下UDP广播发送与接收
- UDP发送与接收数据
- udp下接收发送数据
- 安卓UDP接收广播数据
- 精简的FFMPEG从UDP广播接收视频数据并播放的示例
- TCP/IP协议入门(一)--阮一峰
- PHP设置脚本最大执行时间的三种方法
- jquery checkbox选中、改变状态、change和click事件
- 正则表达式匹配完整img标签php实现
- php使用位与运算符【&】或【|】实现权限管理
- udp接收广播并连接发送数据
- php 获取代码执行时间和消耗的内存
- php public protected private属性实例详解
- php pdo预处理语句与存储过程
- php错误级别的设置方法
- Restful风格的SSM框架搭建
- php Memcache/Memcached操作手册
- centos 安装flash插件
- php获得ip地址