package com.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import android.app.Activity;
import android.net.DhcpInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
public class UpdnetActivity extends Activity {
public final int PORT = 34567;
private Button serverButton;
private Button clientButton;
private Button CloseButton;
private ListView listView2;
private ArrayList<Map<String, Object>> arraylist;
private SimpleAdapter mSimpleAdapter;
private final int MESSAGE_LIST_UPDATE = 0;
private Button refreshButton;
private int ServerTag = 0;
private int ClientTag = 0;
Thread ServerThread;
Thread ClientThread;
DatagramSocket sr;
private String IpString;
private String DeviceName;
private HashMap<String, Object> map;
public String sysinfo(){
return android.os.Build.MODEL;
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
serverButton = (Button) findViewById(R.id.button1);
clientButton = (Button) findViewById(R.id.button2);
CloseButton = (Button) findViewById(R.id.button3);
refreshButton = (Button) findViewById(R.id.button4);
serverButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ServerTag = 0;
ServerThread =new Thread(new SendUdpBroadcast());
ServerThread.start();
}
});
clientButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ClientTag = 0;
// TODO Auto-generated method stub
ClientThread =new Thread(new Clientthread());
ClientThread.start();
}
});
CloseButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ServerTag = 1;
ClientTag = 1;
if(ServerThread != null){
ServerThread.interrupt();
ServerThread = null;
}
if(ClientThread != null){
ClientThread.interrupt();
ClientThread = null;
sr.disconnect();
}
}
});
arraylist = new ArrayList<Map<String, Object>>();
mSimpleAdapter = new SimpleAdapter(this, arraylist,
R.layout.controldevice_name, new String[] { "devicename",
"ipaddress" }, new int[] { R.id.name, R.id.state });
listView2 = (ListView) findViewById(R.id.listview2);
listView2.setAdapter(mSimpleAdapter);
refreshButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Refresh();
}
});
}
private void Refresh(){
arraylist.clear();
mSimpleAdapter.notifyDataSetChanged();
}
public class SendUdpBroadcast extends Thread{
public void run() {
// TODO Auto-generated method stub
super.run();
DatagramSocket socket;
try{
Log.e("SendUdpBroadcast","SendUdpBroadcast");
socket = new DatagramSocket();
InetAddress serverAddress = InetAddress.getByName(getServerName());
String str = sysinfo();
byte data [] = str.getBytes();
DatagramPacket packet = new DatagramPacket(data,data.length,serverAddress,PORT);
while (ServerTag == 0) {
try {
Log.d("Udpnet", "serverAddress"+serverAddress);
socket.send(packet);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}catch (Exception e) {
// TODO: handle exception
}
}
}
private String intToIp(int i) {
return ( i & 0xFF) + "." +
((i >> 8 ) & 0xFF) + "." +
((i >> 16 ) & 0xFF) + "." +
((i >> 24 ) & 0x00 ) ;
}
private String getServerName(){
WifiManager mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
DhcpInfo info = mWifiManager.getDhcpInfo();
return intToIp(info.gateway);
}
// public class Serverthread extends Thread {
// DatagramSocket ss;
//
// public void run() {
// // TODO Auto-generated method stub
// try {
// ss = new DatagramSocket();
// } catch (SocketException e) {
// e.printStackTrace();
// }
// try {
// ss.setBroadcast(true);
// } catch (SocketException e) {
// e.printStackTrace();
// }
// byte[] b = new byte[100];
// DatagramPacket p = new DatagramPacket(b, b.length);
// try {
// p.setAddress(InetAddress.getByAddress(new byte[] { (byte) 192,
// (byte) 168, (byte) 1, (byte) 0 }));
// } catch (UnknownHostException e) {
// e.printStackTrace();
// }
// p.setPort(PORT);
// int i = 0;
// while (true) {
//
// String s = new Integer(i++).toString();
// b = s.getBytes();
// p.setData(b);
// try {
// Log.e("Udpnet", "Send data");
// ss.send(p);
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// try {
// Thread.sleep(2000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
// }
// }
public class Clientthread extends Thread {
DatagramSocket sr;
public void run() {
// TODO Auto-generated method stub
super.run();
try {
sr = new DatagramSocket(PORT);
} catch (SocketException e) {
// TODO Auto-generated catch block
Log.e("Clientthread","SocketException");
e.printStackTrace();
}
if(sr == null){
Log.e("Clientthread","sr == null");
}
while (ClientTag == 0) {
byte[] buf = new byte[256];
DatagramPacket pct = new DatagramPacket(buf, buf.length);
try {
Log.e("UdpClient", "receiver");
sr.receive(pct);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String s = new String(buf);
Log.e("UpdClient", s.replaceAll("\0", "") + " " + pct.getAddress().toString());
IpString = pct.getAddress().toString();
IpString = IpString.substring(1, IpString.length());
DeviceName = new String(pct.getData(),pct.getOffset(),pct.getLength());
Log.e("UpdClient", "IpString" + IpString);
Message msg = new Message();
msg.what = MESSAGE_LIST_UPDATE;
mHandler.sendMessage(msg);
}
}
}
public Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what) {
case MESSAGE_LIST_UPDATE:
updateArraylist();
break;
}
}
};
private void updateArraylist(){
map = new HashMap<String, Object>();
map.put("devicename", DeviceName);
map.put("ipaddress", IpString);
arraylist.add(map);
mSimpleAdapter.notifyDataSetChanged();
}
}
Android UDP broadcast Example
2星 需积分: 9 159 浏览量
2012-08-24
19:40:38
上传
评论
收藏 56KB RAR 举报
swordpy
- 粉丝: 0
- 资源: 4
最新资源
- 毕业设计-仿生六足机器人的制作全教程源码+电子元器件+程序代码+线路组件图+安装教程+搭建视频教程
- 基于ROS和webots的xrobot机械臂仿真初探C++源码
- 基于ROS的点焊机器人仿真与控制python源码+文档说明+使用说明+详细注释
- 基于vue实现的细粒度交通时空大数据分析系统+源代码+文档说明
- 安卓大作业-基于Electron的交通时空大数据分析挖掘系统客户端(Android)+源代码+文档说明+界面截图
- 基于Java的朱氏集团客户关系管理系统设计源码
- 基于C++的作业提交与批改系统设计源码
- 基于Vue2的移动端电影资讯网站设计源码
- 高分课程设计作业-基于QT的模仿宝石迷阵游戏C++源码+文档说明+界面截图
- 基于Apache Spark的Spark DistCP重实现设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈