Android(安卓)开发技巧之Log发送UDP报文,Socket编程
16lz
2021-01-24
和把Log写入文件的原因相同:http://blog.csdn.net/wyzxk888/article/details/7478152
就是因为Android开发过程中会出现手机offline,为了达到更加实时的查看日志信息,可以使用Java提供的Socket相关类,通过不断的发送UDP包达到效果。
手机端同样是一个单例类,用于发送日志消息:
package org.test;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.text.SimpleDateFormat;import java.util.Date;public class LogSender {private static LogSender mLogSender;private static DatagramSocket socket;private static InetAddress serverAddress;private static int port;private static SimpleDateFormat df;private LogSender(String host, int por) throws SocketException, UnknownHostException {socket = new DatagramSocket();port = por;serverAddress = InetAddress.getByName(host);}public static LogSender create(String host, int port) throws SocketException, UnknownHostException {if (mLogSender == null) {mLogSender = new LogSender(host, port);}df = new SimpleDateFormat("[yy-MM-dd hh:mm:ss]: ");return mLogSender;}public void close() {socket.close();}public void print(String log) throws IOException {log = df.format(new Date()) + log;DatagramPacket pack = new DatagramPacket(log.getBytes(), log.getBytes().length, serverAddress, port);socket.send(pack);}public void print(Class cls, String log) throws IOException {print(cls.getSimpleName() + " " + log);}}
用法和Log写入文件时一样的,生成实例,在需要打日志的地方print一下:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); try { mLogSender = LogSender.create("192.168.1.184", 4567);} catch (IOException e) {// TODO Auto-generated catch blockLog.d(tag, e.getMessage());} log("onCreate()"); } public void log(String msg) { Log.d(tag, msg); try { mLogSender.print(AlarmManagerDemo.class, msg); //这里发送} catch (IOException e) {// TODO Auto-generated catch blockLog.d(tag, e.getMessage());} }
除了上面之外,还需要写一个简单的Java服务端程序接受发过来的日志消息进行打印
public class ServerApp {public static void main(String[] args) {new Thread(new Server()).start();}private static class Server implements Runnable {@Overridepublic void run() {ServerSocket mServerSocket = null;try {mServerSocket = new ServerSocket(4567);Socket client = mServerSocket.accept();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(client.getInputStream()));while(true) {String str = bufferedReader.readLine();System.out.println(str);}} catch (IOException e) {System.out.println(e.getMessage());} finally {try {mServerSocket.close();} catch (IOException e) {// TODO Auto-generated catch blockSystem.out.println(e.getMessage());}}}}}
效果图:
更多相关文章
- android 默认浏览器 无法下载,此手机不支持此内容(自定义文件or AP
- Android(cacerts.bks)添加根证书
- android studio查看genymotion模拟器上文件目录
- Cordova插件编写流程(Android平台)
- Android签名文件转化为pk8和pem的实现
- Android(安卓)多分包,方法数超出 65536 限制
- Android01————快速入门
- Android(安卓)OTA 升级之三:生成recovery.img
- android中ListView点击和里边按钮或ImageView点击不能同时生效问