PC服务器端代码:

  1. /*
  2. * PC与<a href="http://lib.csdn.net/base/android" class='replace_word' title="Android知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Android</a>客户端实现文件的传送
  3. * PC服务器端
  4. */
  5. package com.<a href="http://lib.csdn.net/base/android" class='replace_word' title="Android知识库" target='_blank' style='color:#df3434; font-weight:bold;'>android</a>.test;
  6. import <a href="http://lib.csdn.net/base/java" class='replace_word' title="Java 知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Java</a>.io.BufferedInputStream;
  7. import java.io.DataInputStream;
  8. import java.io.DataOutputStream;
  9. import java.io.File;
  10. import java.io.FileInputStream;
  11. import java.io.IOException;
  12. import java<a href="http://lib.csdn.net/base/dotnet" class='replace_word' title=".NET知识库" target='_blank' style='color:#df3434; font-weight:bold;'>.NET</a>.ServerSocket;
  13. import java<a href="http://lib.csdn.net/base/dotnet" class='replace_word' title=".NET知识库" target='_blank' style='color:#df3434; font-weight:bold;'>.net</a>.Socket;
  14. public class TransferFileServer {
  15. private static final int HOST_PORT = ;
  16. private void start() {
  17. Socket s = null;
  18. try {
  19. ServerSocket ss = new ServerSocket(HOST_PORT);
  20. while (true) {
  21. String filePath = "/home/fan/Pictures/1.jpg";
  22. File file = new File(filePath);
  23. System.out.println("文件长度:" + (int) file.length());
  24. s = ss.accept();
  25. log("建立Socket连接");
  26. DataInputStream dis = new DataInputStream(
  27. new BufferedInputStream(s.getInputStream()));
  28. dis.readByte();
  29. DataInputStream fis = new DataInputStream(
  30. new BufferedInputStream(new FileInputStream(filePath)));
  31. DataOutputStream dos = new DataOutputStream(s.getOutputStream());
  32. dos.writeUTF(file.getName());
  33. dos.flush();
  34. dos.writeLong((long) file.length());
  35. dos.flush();
  36. int bufferSize = ;
  37. byte[] buf = new byte[bufferSize];
  38. while (true) {
  39. int read = ;
  40. if (fis != null) {
  41. read = fis.read(buf);
  42. }
  43. if (read == -) {
  44. break;
  45. }
  46. dos.write(buf,,read);
  47. }
  48. dos.flush();
  49. // 注意关闭socket链接哦,不然客户端会等待server的数据过来,
  50. // 直到socket超时,导致数据不完整。
  51. fis.close();
  52. s.close();
  53. log("文件传输完成");
  54. }
  55. } catch (IOException e) {
  56. // TODO Auto-generated catch block
  57. e.printStackTrace();
  58. }
  59. }
  60. void log(String msg) {
  61. System.out.println(msg);
  62. }
  63. public static void main(String args[]) {
  64. new TransferFileServer().start();
  65. }
  66. }

ClientSocket:辅助类

  1. /*
  2. * PC与Android文件传输
  3. * Android客户端
  4. */
  5. package com.android.test;
  6. import java.io.BufferedInputStream;
  7. import java.io.DataInputStream;
  8. import java.io.DataOutputStream;
  9. import java.io.IOException;
  10. import java<a href="http://lib.csdn.net/base/dotnet" class='replace_word' title=".NET知识库" target='_blank' style='color:#df3434; font-weight:bold;'>.Net</a>.Socket;
  11. import java.net.UnknownHostException;
  12. public class ClientSocket {
  13. private String ip;
  14. private int port;
  15. private Socket socket = null;
  16. DataOutputStream out = null;
  17. DataInputStream getMessageStream = null;
  18. public ClientSocket(String ip, int port) {
  19. this.ip = ip;
  20. this.port = port;
  21. }
  22. public void createConnection() {
  23. try {
  24. socket = new Socket(ip, port);
  25. } catch (UnknownHostException e) {
  26. // TODO Auto-generated catch block
  27. e.printStackTrace();
  28. if (socket != null) {
  29. try {
  30. socket.close();
  31. } catch (IOException e1) {
  32. // TODO Auto-generated catch block
  33. e1.printStackTrace();
  34. }
  35. }
  36. } catch (IOException e) {
  37. // TODO Auto-generated catch block
  38. e.printStackTrace();
  39. if (socket != null) {
  40. try {
  41. socket.close();
  42. } catch (IOException e1) {
  43. // TODO Auto-generated catch block
  44. e1.printStackTrace();
  45. }
  46. }
  47. } finally {
  48. }
  49. }
  50. public void sendMessage(String sendMessage) {
  51. try {
  52. out = new DataOutputStream(socket.getOutputStream());
  53. if (sendMessage.equals("Windows")) {
  54. out.writeByte(0x1);
  55. out.flush();
  56. return;
  57. }
  58. if (sendMessage.equals("Unix")) {
  59. out.writeByte(0x2);
  60. out.flush();
  61. return;
  62. }
  63. if (sendMessage.equals("<a href="http://lib.csdn.net/base/linux" class='replace_word' title="Linux知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Linux</a>")) {
  64. out.writeByte(0x3);
  65. out.flush();
  66. } else {
  67. out.writeUTF(sendMessage);
  68. out.flush();
  69. }
  70. } catch (IOException e) {
  71. // TODO Auto-generated catch block
  72. e.printStackTrace();
  73. if (out != null) {
  74. try {
  75. out.close();
  76. } catch (IOException e1) {
  77. // TODO Auto-generated catch block
  78. e1.printStackTrace();
  79. }
  80. }
  81. }
  82. }
  83. public DataInputStream getMessageStream() {
  84. try {
  85. getMessageStream = new DataInputStream(new BufferedInputStream(
  86. socket.getInputStream()));
  87. // return getMessageStream;
  88. } catch (IOException e) {
  89. // TODO Auto-generated catch block
  90. e.printStackTrace();
  91. if (getMessageStream != null) {
  92. try {
  93. getMessageStream.close();
  94. } catch (IOException e1) {
  95. // TODO Auto-generated catch block
  96. e1.printStackTrace();
  97. }
  98. }
  99. }
  100. return getMessageStream;
  101. }
  102. public void shutDownConnection() {
  103. try {
  104. if (out != null) {
  105. out.close();
  106. }
  107. if (getMessageStream != null) {
  108. getMessageStream.close();
  109. }
  110. if (socket != null) {
  111. socket.close();
  112. }
  113. } catch (IOException e) {
  114. // TODO Auto-generated catch block
  115. e.printStackTrace();
  116. }
  117. }
  118. }

Android客户端:Acitivyt实现:

  1. package com.android.test;
  2. import java.io.BufferedOutputStream;
  3. import java.io.DataInputStream;
  4. import java.io.DataOutputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import android.app.Activity;
  8. import android.os.Bundle;
  9. import android.util.Log;
  10. import android.view.View;
  11. import android.view.View.OnClickListener;
  12. import android.widget.Button;
  13. public class Main extends Activity implements OnClickListener{
  14. private ClientSocket cs = null;
  15. private static final String FILE_PATH = "/mnt/sdcard/";
  16. private String ip = "192.168.1.103";
  17. private int port = ;
  18. private String sendMessage = "<a href="http://lib.csdn.net/base/linux" class='replace_word' title="Linux知识库" target='_blank' style='color:#df3434; font-weight:bold;'>linux</a>";
  19. private Button mButton;
  20. @Override
  21. public void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.main);
  24. mButton = (Button)findViewById(R.id.start);
  25. mButton.setOnClickListener(this);
  26. }
  27. private void start() {
  28. if (createConnection()) {
  29. sendMessage();
  30. getMessage();
  31. }
  32. }
  33. private void getMessage() {
  34. if (cs == null)
  35. return;
  36. DataInputStream inputStream = null;
  37. inputStream = cs.getMessageStream();
  38. try {
  39. String savePath = FILE_PATH;
  40. int bufferSize = ;
  41. byte[] buf = new byte[bufferSize];
  42. int passedlen = ;
  43. long len = ;
  44.  
  45. savePath += inputStream.readUTF();
  46. Log.d("AndroidClient","@@@savePath"+savePath);
  47. DataOutputStream fileOut = new DataOutputStream(
  48. new BufferedOutputStream(new BufferedOutputStream(
  49. new FileOutputStream(savePath))));
  50. len = inputStream.readLong();
  51. Log.d("AndoridClient","文件的长度为:"+len);
  52. Log.d("AndroidClient","开始接收文件");
  53. while(true) {
  54. int read = ;
  55. if (inputStream != null) {
  56. read = inputStream.read(buf);
  57. }
  58. passedlen += read;
  59. if (read == -) {
  60. break;
  61. }
  62. Log.d("AndroidClient","文件接收了"+(passedlen*/len)+"%/n");
  63. fileOut.write(buf,,read);
  64. }
  65. Log.d("AndroidClient","@@@文件接收完成"+savePath);
  66. fileOut.close();
  67. } catch (IOException e) {
  68. // TODO Auto-generated catch block
  69. e.printStackTrace();
  70. }
  71. }
  72. private void sendMessage() {
  73. if (cs == null)
  74. return;
  75. cs.sendMessage(sendMessage);
  76. }
  77. private boolean createConnection() {
  78. cs = new ClientSocket(ip, port);
  79. cs.createConnection();
  80. Log.d("Main", "连接服务器成功:");
  81. return true;
  82. }
  83. public void onClick(View v) {
  84. start();
  85. }
  86. }

Android 用Socket实现PC和手机的文件传输的更多相关文章

  1. python+socket实现网络信息交互及文件传输

    Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket又称"套接字",应用程序通常通过"套接字" ...

  2. android adb命令,向开发手机添加文件

    adb文档 把本地文件发送到调试手机 C:\Users\ajanuw>adb push C:\Users\ajanuw\Music\j.mp3 /storage/emulated/0/Downl ...

  3. 非堵塞socket实现android手机与PC的文件传输

    项目须要是通过WIFI建立手机和PC的通信,然后自己定义一个简单的协议对要传输的文件进行校验,传输的文件是2张3M的图片,要求考虑网络中断情况处理. 我这里採用的是非堵塞socket来实现的,之前查过 ...

  4. Android Socket连接PC出错问题及解决

    最近测试问题:Android 通过Socket链接电脑,ip和端口都是正确的,也在同一网段,可android端就是报异常如下: 解决办法:测试电脑的防火墙可能开着,在控制面板把防火墙打开即可.

  5. Appium 连手机失败Error: Android bootstrap socket crashed: Error: getaddrinfo ENOTFOUND localhost undefined:4724

    问题:Appium执行,连接手机报下面的错误 Error: Android bootstrap socket crashed: Error: getaddrinfo ENOTFOUND localho ...

  6. android视频录制、另一部手机实时观看方案

    最近调研android视频录制.另一部手机实时观看,大致有以下几种思路. 1. android手机充当服务器,使用NanoHTTPD充当服务器,另一部手机或者pc通过输入http://手机的ip:80 ...

  7. Android之socket多线程(二)

    使用ServerSocket创建服务器端: public static void main(String[] args) throws IOException { // TODO Auto-gener ...

  8. Nginx配置网站适配PC和手机

    考虑到网站的在多种设备下的兼容性,有很多网站会有手机版和电脑版两个版本.访问同一个网站URL,当服务端识别出用户使用电脑访问,就打开电脑版的页面,用户如果使用手机访问,则会得到手机版的页面. 1.判断 ...

  9. 【转】Nginx区分PC或手机访问不同网站

    原文链接:http://www.nginx.cn/784.html 近几年来,随着手机和pad的普及,越来越多的用户选择使用移动客户端访问网站,而为了获取更好的用户体验,就需要针对不同的设备显示出最合 ...

随机推荐

  1. Android带索引联系人列表

    网上Android联系人列表的样例也非常多,都和微信的联系人差点儿相同,因为项目用到了联系人列表索引功能(产品把字母item给去掉了),只是也还是好实现.这里我也来分享分享我的实现,免得以后忘了.那先 ...

  2. jquery 表单重置通用方法

    $("#form_id").find(":input").not(":button,:submit,:reset,:hidden").val ...

  3. quartz 持久化 数据库表

    此处只包括配置数据库操作 quartz 持久化数据库表格字段解释建表,SQL语句在dbTables文件夹中可以找到,介绍下我们开发主要使用到的表: (版本不一样,可能数据库表也不一样,这里使用2.2. ...

  4. Chromium Graphics: HW Video Acceleration in Chrom{e,ium}{,OS}

    HW Video Acceleration in Chrom{e,ium}{,OS} Ami Fischman <fischman@chromium.org> Status as of 2 ...

  5. Tensorflow 学习笔记 -----gradient

    Tensorflow 的求梯度函数: [db, dW, dx] = tf.gradient(C, [b, w, x]) 在调试时用处较大. 实例: import tensorflow as tf im ...

  6. 页面打开pdf格式文件的方法

    <embed width=500 height=300 fullscreen=yes src="1.pdf" />

  7. 错误:created a ThreadLocal with key of type ……but failed to remove it when the web application was stopped. This is very likely to create a memory leak.

    tomcat reload显示错误:SEVERE: The web application [/Interceptor] created a ThreadLocal with key of type ...

  8. UVa 10101 - Bangla Numbers

    题目:将数字数转化成数字加单词的表示形式输出. 分析:数论.简单题.直接分成两部分除10000000的商和余数,分别输出就可以. 说明:注意输入为数字0的情况,还有long long类型防止溢出. # ...

  9. final使用方法

     final的作用随着所修饰的类型而不同 1.final修饰类中的属性或者变量 不管属性是基本类型还是引用类型.final所起的作用都是变量里面存放的"值"不能变. 这个值,对 ...

  10. 如何实现对网站页面访问量的统计(javaweb和php)

    如何实现对网站页面访问量的统计(javaweb和php) 一.总结 一句话总结:其实很简单啦,每访问一次那个页面对应的index函数(控制器中的那个函数)访问次数就加1就可以了. 1.javaweb中 ...