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

先上客户端的代码:

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

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

  1. private void upload(String path) {
  2. int length = 0;
  3. byte[] sendBytes = null;
  4. Socket socket = null;
  5. DataOutputStream dos = null;
  6. FileInputStream fis = null;
  7.  
  8. try {
  9. try {
  10. socket = new Socket(ip,duankou);
  11. dos = new DataOutputStream(socket.getOutputStream());
  12. File file = new File(filename);
  13. fis = new FileInputStream(file);
  14. sendBytes = new byte[1024];
  15. while ((length = fis.read(sendBytes, 0, sendBytes.length)) > 0) {
  16. dos.write(sendBytes, 0, length);
  17. dos.flush();
  18. }
  19. } finally {
  20. if (dos != null)
  21. dos.close();
  22. if (fis != null)
  23. fis.close();
  24. if (socket != null)
  25. socket.close();
  26. }
  27. } catch (Exception e) {
  28. e.printStackTrace();
  29. }
  30. }

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

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

  1. public class Receiver implements Runnable {
  2. public static void main(String[] args) {
  3. try {
  4. final ServerSocket server = new ServerSocket(3333);
  5. Thread th = new Thread(new Runnable() {
  6. public void run() {
  7. while (true) {
  8. try {
  9. System.out.println("开始监听...");
  10. Socket socket = server.accept();
  11. System.out.println("有链接");
  12. receiveFile(socket);
  13. } catch (Exception e) {
  14. }
  15. }
  16. }
  17. });
  18.  
  19. th.run(); // 启动线程运行
  20. } catch (Exception e) {
  21. e.printStackTrace();
  22. }
  23. }
  24.  
  25. public void run() {
  26. }
  27.  
  28. public static void receiveFile(Socket socket) {
  29. byte[] inputByte = null;
  30. int length = 0;
  31. DataInputStream dis = null;
  32. FileOutputStream fos = null;
  33. try {
  34. try {
  35. dis = new DataInputStream(socket.getInputStream());
  36. fos = new FileOutputStream(new File("./cc.jpg"));
  37. inputByte = new byte[1024];
  38. System.out.println("开始接收数据...");
  39. while ((length = dis.read(inputByte, 0, inputByte.length)) > 0) {
  40. System.out.println(length);
  41. fos.write(inputByte, 0, length);
  42. fos.flush();
  43. }
  44. System.out.println("完成接收");
  45. } finally {
  46. if (fos != null)
  47. fos.close();
  48. if (dis != null)
  49. dis.close();
  50. if (socket != null)
  51. socket.close();
  52. }
  53. } catch (Exception e) {
  54. }
  55. }
  56. }

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

Android—基于Socket与上传图片到客户端的更多相关文章

  1. Android 基于Socket的聊天应用(二)

    很久没写BLOG了,之前在写Android聊天室的时候答应过要写一个客户(好友)之间的聊天demo,Android 基于Socket的聊天室已经实现了通过Socket广播形式的通信功能. 以下是我写的 ...

  2. Android 基于Socket的聊天室(一)

    Socket是TCP/IP协议上的一种通信,在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路.一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信. Client A ...

  3. Android基于socket的群聊程序

    在网上看了好多,但是感觉不是太简单就是只能单独聊,所以就自己写了个可以群聊的,直接上代码了 一.服务器端 这里用的MyEclipse作为服务器端 MyServerScoket.java package ...

  4. 「完整案例」基于Socket开发TCP传输客户端

    ​1 程序界面设计 TCP客户端在上位机开发中应用很广,大多数情况下,上位机软件都是作为一个TCP客户端来与PLC或其他服务器进行通信的.TCP客户端的主要功能就是连接服务器.发送数据.接收数据.断开 ...

  5. 基于socket、多线程的客户端服务器端聊天程序

    服务器端: using System; using System.Windows.Forms; using System.Net.Sockets; using System.Net;//IPAddre ...

  6. 基于Socket网络编程

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a2011480169/article/details/73602708 博客核心内容: 1.Sock ...

  7. 基于android的Socket通信

    一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户 ...

  8. 基于Socket客户端局域网或广域网内共享同一短信猫收发短信的开发解决方案

    可使同一网络(局域网或广域网)内众多客户端,共享一个短信猫设备短信服务器进行短信收发,短信服务器具备对客户端的管理功能. 下面是某市建设银行采用本短信二次开发平台时实施的系统方案图: 在该方案中,考虑 ...

  9. 基于socket的客户端和服务端聊天简单使用 附Demo

    功能使用 服务端 分离一个不停接受客户端请求的线程 接受不客户端请求的线程中,再分离就收消息的线程 几大对象分别是 IPEndPoint IP终结点 服务端Socket,绑定终结点Bind,启动监听L ...

随机推荐

  1. Java设计模式之工厂模式(Factory)

    前言: 前面学习了建造者设计模式,接下来学习一下Retrofit中使用的另外一个设计模式,工厂设计模式!!!里面采用工厂模式使得数据转换得到完全解耦,工厂模式的好处用到了极致,如此好的设计模式我们怎能 ...

  2. 远程管理 KVM 虚机 - 每天5分钟玩转 OpenStack(5)

    上一节我们通过 virt-manager 在本地主机上创建并管理 KVM 虚机.其实 virt-manager 也可以管理其他宿主机上的虚机.只需要简单的将宿主机添加进来 填入宿主机的相关信息,确定即 ...

  3. Python标准库13 循环器 (itertools)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在循环对象和函数对象中,我们了解了循环器(iterator)的功能.循环器是对象的 ...

  4. 使用wireshark抓包分析浏览器无法建立WebSocket连接的问题(server为Alchemy WebSockets组件)

    工作时使用了Websocket技术,在使用的过程中发现,浏览器(Chrome)升级后可能会导致Websocket不可用,更换浏览器后可以正常使用. 近日偶尔一次在本地调试,发现使用相同版本的Chrom ...

  5. 配置putty自动登陆服务器

    putty是一款知名的SSH工具,可以用来登陆linux服务器,提供了终端.SSH是secure Shell的缩写.我之前也有一篇文章介绍这个话题:http://www.cnblogs.com/che ...

  6. linux标准IO缓冲(apue)

    为什么需要标准IO缓冲? LINUX用缓冲的地方遍地可见,不管是硬件.内核还是应用程序,内核里有页高速缓冲,内存高速缓冲,硬件更不用说的L1,L2 cache,应用程序更是多的数不清,基本写的好的软件 ...

  7. Linux:Ubuntu16.04下创建Wifi热点

    Linux:Ubuntu16.04下创建Wifi热点 说明: 1.Ubuntu16.04里面可以直接创建热点,而不用像以前的版本,还要其他辅助工具. 2.本篇文章转载自编程人生 具体步骤如下: 1.  ...

  8. 《图解Spark:核心技术与案例实战》介绍及书附资源

    本书中所使用到的测试数据.代码和安装包放在百度盘提供 下载 ,地址为https://pan.baidu.com/s/1o8ydtKA 密码:imaa 另外在百度盘提供本书附录  下载 ,地址为http ...

  9. MVC发布后项目存在于根目录中的子目录中时的css与js、图片路径问题

    加载固定资源js与css <script src="@Url.Content("~/Scripts/js/jquery.min.js")" type=&q ...

  10. 新浪云SAE使用入门,教你如何发布自己的网站

    新浪云sae是一个免费的web服务器,SAE的Web服务器采用分布式部署的方式,开发者将代码部署到SAE前端机后,会通过同步的方式,将代码部署到SAE所有的Web服务器.相当于在每一台Web服务器上都 ...