测试代码(TCP通信服务端)

package com.demo;import java.io.InputStream;import java.io.DataInputStream;import java.io.OutputStream;import java.io.DataOutputStream;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;/* * 基于TCP协议的Socket通信 * 服务器端 */public class Hello {    public static void main(String[] args) {        try {            //1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口            ServerSocket serverSocket = new ServerSocket(8888);            Socket socket=null;            //记录客户端的数量            int count=0;            System.out.println("\n***Start the server and wait for the client to connect***");            //循环监听等待客户端的连接            while(true){                //调用accept()方法开始监听,等待客户端的连接                socket=serverSocket.accept();                //创建一个新的线程                ServerThread serverThread = new ServerThread(socket);                //启动线程                serverThread.start();                count++;//统计客户端的数量                System.out.println("The number of clients: "+count);                InetAddress address=socket.getInetAddress();                System.out.println("Current client IP: "+address.getHostAddress());            }        } catch (Exception e) {            e.printStackTrace();        }    }    /*    * 服务器线程处理类    */    public static class ServerThread extends Thread {        // 和本线程相关的Socket        Socket socket = null;        public ServerThread(Socket socket) {            this.socket = socket;        }        //线程执行的操作,响应客户端的请求        public void run(){            InputStream       inputStream      = null;            DataInputStream   dataInputStream  = null;            OutputStream      outputStream     = null;            DataOutputStream  dataOutputStream = null;            try {                //获取输入流,并读取客户端信息                inputStream     = socket.getInputStream();                dataInputStream = new DataInputStream(inputStream);                //获取输出流,响应客户端的请求                outputStream = socket.getOutputStream();                dataOutputStream = new DataOutputStream(outputStream);                while (true) {                    //循环读取客户端的信息                    byte b[] = new byte[1024];                    b[0] = '\0';                    dataInputStream.read(b);                                   String info = new String(b);                    System.out.println("I am a server and the client says: "+info);                    if (info.trim().equals("quit")) {                        break;                    }                    dataOutputStream.write("Welcome to visit!".getBytes("UTF-8"));                    dataOutputStream.flush();//调用flush()方法将缓冲输出                }            } catch (Exception e) {                e.printStackTrace();            }finally{                //关闭资源                try {                    if(socket != null) {                        socket.shutdownInput();//关闭输入流                        socket.shutdownOutput();//关闭输出流                    }                    if(dataOutputStream != null) {                        dataOutputStream.close();                    }                    if(outputStream != null) {                        outputStream.close();                    }                    if (dataInputStream != null) {                        dataInputStream.close();                    }                    if(inputStream != null) {                        inputStream.close();                    }                    if(socket != null) {                        socket.close();                    }                } catch (Exception e) {                    e.printStackTrace();                }            }        }    }}



目录结构

源码:src/com/demo/Hello.java编译后文件目录(和src同级):bin



编译

javac -sourcepath ./src ./src/com/demo/Hello.java -d ./bin  -encoding utf-8



将Java class转Android class

cd bindx --dex --output=Hello.dex ./com/demo/*.class



注意

如果出现以下异常信息,则表示jdk版本过高,而这个dx命令还不支持,如使用jdk版本是1.8,而这个dx命令还不支持1.8的jdk。那么需要重新编译。

UNEXPECTED TOP-LEVEL EXCEPTION:com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)        at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)        at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)        at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)        at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)        at com.android.dx.command.dexer.Main.processClass(Main.java:704)        at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)        at com.android.dx.command.dexer.Main.access$300(Main.java:83)        at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)        at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:170)        at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)        at com.android.dx.command.dexer.Main.processOne(Main.java:632)        at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:280)        at com.android.dx.command.dexer.Main.run(Main.java:246)        at com.android.dx.command.dexer.Main.main(Main.java:215)        at com.android.dx.command.Main.main(Main.java:106)...while parsing com/demo/Hello.class

重新编译,并忽略警告信息,最后再重新将Java class转Android class

javac -sourcepath ./src -source 1.7 -target 1.7 ./src/com/demo/Hello.java -d ./bin -encoding utf-8



将Hello.dex推送到Android设备中

adb push Hello.dex /data/local/tmp



运行

export CLASSPATH=/data/local/tmp/Hello.dexexec app_process /data/local/tmp com.demo.Hello

以上两条命令可以通过下面一条执行:

exec app_process -Djava.class.path=/data/local/tmp/Hello.dex /data/local/tmp com.demo.Hello 

更多相关文章

  1. 又一处疑难杂症的折腾笔记:Android内嵌html5获取定位信息
  2. android--------根据文件路径使用File类获取文件相关信息
  3. Android作为CXF客户端调用服务端。
  4. Android电池信息(Battery information)
  5. Android客户端与服务端交互-客户端GET方式登录和客户端POST方式
  6. android 获取图片信息 之 ExifInterface
  7. 推荐几个比较好的android客户端开发教程

随机推荐

  1. Linux下Android(安卓)SDK中adb找不到的解
  2. Android(安卓)蓝牙开发(九)A2DP基本功能
  3. Android(安卓)SDK下载和更新失败的解决方
  4. ScrollView拉到尽头时出现阴影的解决方法
  5. Android(安卓)访问Webservice接口,参数对
  6. Android(安卓)导入项目时遇到的JNI和NDK
  7. android 2.3 wifi (二)
  8. Android(安卓)Camera对焦相关
  9. android从sdcard加载.9.png图片
  10. android 连接服务器的方法及安全性问题