仅记录代码
public class UDPUtils implements Runnable {
public boolean keepRunning = true;//线程开始标志
public static final String TAG = "UDPUtils";
//本机监听的端口
//发送的消息
private String message = "test";
//服务器接收的消息
private String receive;
//Handler传递的数据
private Message msg;
//Message传递的Buddle参数
private Bundle bundle;
//wifi名和密码
private String SSID, password;
private Handler mHandler;
public UDPUtils(Handler handler) {
mHandler = handler;
}
public void setMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
/**
* 线程停止标志
*
* @param keepRunning
*/
public void setKeepRunning(boolean keepRunning) {
this.keepRunning = keepRunning;
}
public boolean getKeepRunning() {
return this.keepRunning;
}
/**
* 服务端监听程序
*/
public void StartListen() {
keepRunning = getKeepRunning();
DatagramSocket socket = null;
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
try {
socket = new DatagramSocket(LOCAL_PORT);
socket.setBroadcast(true);
Log.i(TAG, "socket");
// socket.setSoTimeout(200);
} catch (Exception e) {
e.printStackTrace();
return;
}
while (keepRunning) {
try {
//等待客户机连接
packet.setData(data);
Log.e(TAG, "receive0");
socket.receive(packet);
receive = new String(packet.getData(), 0, packet.getLength());
msg = new Message();
bundle = new Bundle();
//把数据放到buddle中
bundle.putString("receive", receive);
//把buddle传递到message
msg.setData(bundle);
mHandler.sendMessage(msg);
} catch (Exception e) {
continue;
}
}
if (socket != null) {
socket.close();
socket = null;
}
}
public void sendControInfo(String message) {
try {
DatagramSocket sendSocket = new DatagramSocket();
byte[] configInfo = message.getBytes();
InetAddress ip = InetAddress.getByName(SERVER_IP); //即目的IP
DatagramPacket sendPacket = new DatagramPacket(configInfo, configInfo.length, ip, SERVER_PORT);// 创建发送类型的数据报:
sendSocket.send(sendPacket); // 通过套接字发送数据:
sendSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
StartListen();
}
}
在调用的地方如下:
@Override
public void initData(Bundle savedInstanceState) {
super.initData(savedInstanceState);
udpUtils = new UDPUtils(myHandler);
thread = new Thread(udpUtils);
thread.start();
//发送UDP指令的函数
sendUdpMsg();
}
private void sendUdpMsg() {
new Thread() {
@Override
public void run() {
udpUtils.sendControInfo(GET_CONFIG_FILE_DATA);
}
}.start();
// thread = new Thread(udpUtils);
// thread.start();
}
//利用Handler将接收的数据实时打印出来
Handler myHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle bundle = new Bundle();
//从传过来的message数据中取出传过来的绑定数据的bundle对象
bundle = msg.getData();
String receive = bundle.getString("receive");
Log.i(TAG, "收到消息了: " + receive);
}
};
调试软件,Windows版本