你的位置:首页 > 操作系统

[操作系统]Android—基于Socket与上传图片到客户端


      最近项目中需要客户端和Socket互相传递数据时候需要相互传递图片所以做下总结以免以后忘记,也希望给大家带来帮助。

      先上客户端的代码:

      根据图片名称上传照相机中单个照片(此方法为自己封装)

      参数所代表的是照片的路径。

 private void upload(String path) {      int length = 0;     byte[] sendBytes = null;     Socket socket = null;     DataOutputStream dos = null;     FileInputStream fis = null;     try {       try {         socket = new Socket(ip,duankou);         dos = new DataOutputStream(socket.getOutputStream());         File file = new File(filename);         fis = new FileInputStream(file);         sendBytes = new byte[1024];         while ((length = fis.read(sendBytes, 0, sendBytes.length)) > 0) {           dos.write(sendBytes, 0, length);           dos.flush();         }       } finally {         if (dos != null)           dos.close();         if (fis != null)           fis.close();         if (socket != null)           socket.close();       }     } catch (Exception e) {       e.printStackTrace();     }  } 

注:在android Activity调用此方法的时候一定要开一个子线程去调用(网络访问在主线程中是android中一个标志性的错误!!!!)

     接下来是服务端的代码,测试使用新建一个java类即可

public class Receiver implements Runnable {  public static void main(String[] args) {    try {      final ServerSocket server = new ServerSocket(3333);      Thread th = new Thread(new Runnable() {        public void run() {          while (true) {            try {              System.out.println("开始监听...");              Socket socket = server.accept();              System.out.println("有链接");              receiveFile(socket);            } catch (Exception e) {            }          }        }      });      th.run(); // 启动线程运行    } catch (Exception e) {      e.printStackTrace();    }  }  public void run() {  }  public static void receiveFile(Socket socket) {    byte[] inputByte = null;    int length = 0;    DataInputStream dis = null;    FileOutputStream fos = null;    try {      try {        dis = new DataInputStream(socket.getInputStream());        fos = new FileOutputStream(new File("./cc.jpg"));        inputByte = new byte[1024];        System.out.println("开始接收数据...");        while ((length = dis.read(inputByte, 0, inputByte.length)) > 0) {          System.out.println(length);          fos.write(inputByte, 0, length);          fos.flush();        }        System.out.println("完成接收");      } finally {        if (fos != null)          fos.close();        if (dis != null)          dis.close();        if (socket != null)          socket.close();      }    } catch (Exception e) {    }  }}

  最后可以在java项目的根目录下看有没有成功了。