主页 > 网络知识 > Android和PC端通过局域网文件同步用代码怎么实现

Android和PC端通过局域网文件同步用代码怎么实现

Android和PC端通过局域网文件同步代码怎么实现

  局域网通常是分布在一个有限地理范围内的网络系统,一般所涉及的地理范围只有几公里。局域网专用性非常强,具有比较稳定和规范的拓扑结构。这篇文章主要为大家详细介绍了Android和PC端通过局域网文件同步的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

 

Android和PC端通过局域网文件同步用代码怎么实现

 

  具体实现代码如下

  public class FileOptions {

  public String name;

  public String path;

  public long size;

  }

  //Activity

  public class MainActivity extends Activity {

  private TextView tvMsg;

  private EditText logShow, filePath;

  private Handler handler;

  private SocketManager socketManager;

  @Override

  protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout. activity_main);

  tvMsg = (TextView)findViewById(R.id. tvMsg);

  logShow = (EditText)findViewById(R.id. log_show);

  handler = new Handler(){

  @Override

  public void handleMessage(Message msg) {

  switch(msg. what){

  case 0:

  SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss" );

  logShow.append( " [" + format.format(new Date()) + "]" + msg.obj .toString());

  break;

  case 1:

  tvMsg.setText( "请在PC端输入IP:" + GetIpAddress() + " 端口:" + msg.obj .toString());

  break;

  case 2:

  Toast. makeText(getApplicationContext(), msg.obj.toString(), Toast. LENGTH_SHORT).show();

  break;

  }

  }

  };

  socketManager = new SocketManager( handler);

  }

  @Override

  protected void onDestroy() {

  super.onDestroy();

  System. exit(0);

  }

  public String GetIpAddress() {

  WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE );

  WifiInfo wifiInfo = wifiManager.getConnectionInfo();

  int i = wifiInfo.getIpAddress();

  return (i & 0xFF) + "." +

  ((i >> 8 ) & 0xFF) + "." +

  ((i >> 16 ) & 0xFF)+ "." +

  ((i >> 24 ) & 0xFF );

  }

  }

  //socket管理

  public class SocketManager {

  private static final String FILE_PATH= "/glass";

  private static final String TAG = "SocketManager";

  private ServerSocket server;

  private Handler handler = null;

  private List fileList;

  public SocketManager(Handler handler) {

  this. handler = handler;

  int port = 9999;

  while (port > 9000) {

  try {

  server = new ServerSocket(port);

  break;

  } catch (Exception e) {

  port--;

  }

  }

  SendMessage(1, port);

  Thread receiveFileThread = new Thread( new Runnable() {

  @Override

  public void run() {

  while ( true) { // 接收文件

  ReceiveFile();

  }

  }

  });

  receiveFileThread.start();

  }

  void SendMessage( int what, Object obj) {

  if ( handler != null) {

  Message. obtain( handler, what, obj).sendToTarget();

  }

  }

  // 接收文件

  void ReceiveFile() {

  Socket socketPC= null;

  try {

  GetAllFiles();

  socketPC = server.accept();

  InetAddress netAddr = socketPC.getInetAddress();

  String ipaddr = netAddr.getHostAddress();

  Log. w( TAG, ipaddr);

  OutputStream outputStream = socketPC.getOutputStream();

  JSONArray jsonArr= new JSONArray();

  for( int i=0;i< fileList.size();i++){

  try {

  JSONObject jsonObj= new JSONObject();

  jsonObj.put( "name", fileList.get(i). name);

  jsonObj.put( "path", fileList.get(i). path);

  jsonObj.put( "size", fileList.get(i). size);

  jsonArr.put(jsonObj);

  } catch (JSONException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  }

  }

  String sendStr=jsonArr.toString();

  byte[] sendBuf=sendStr.getBytes( "GB2312");

  outputStream.write(sendBuf, 0, sendBuf. length);

  outputStream.flush();

  SendMessage(0, " 发送文件索引完成" );

  outputStream.close();

  socketPC.close();

  for( int i=0;i< fileList.size();i++){

  Socket fileSendSocket = server.accept();

  File fsend= new File( fileList.get(i). path);

  FileInputStream fis= new FileInputStream(fsend);

  OutputStream fos = fileSendSocket.getOutputStream();

  byte[] buf = new byte[1024];

  while ( true) {

  int read = 0;

  if (fis != null) {

  read = fis.read(buf);

  }

  if (read == -1) {

  break;

  }

  fos.write(buf,0,read);

  }

  fos.flush();

  SendMessage(0, fileList.get(i). name+ "--文件传输完成" );

  fis.close();

  fos.close();

  fileSendSocket.close();

  }

  } catch (IOException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  }

  }

  public void SendFile(ArrayList fileName, ArrayList path,

  String ipAddress, int port) {

  try {

  for ( int i = 0; i < fileName.size(); i++) {

  Socket name = new Socket(ipAddress, port);

  OutputStream outputName = name.getOutputStream();

  OutputStreamWriter outputWriter = new OutputStreamWriter(

  outputName);

  BufferedWriter bwName = new BufferedWriter(outputWriter);

  bwName.write(fileName.get(i));

  bwName.close();

  outputWriter.close();

  outputName.close();

  name.close();

  SendMessage(0, "正在发送" + fileName.get(i));

  Socket data = new Socket(ipAddress, port);

  OutputStream outputData = data.getOutputStream();

  FileInputStream fileInput = new FileInputStream(path.get(i));

  int size = -1;

  byte[] buffer = new byte[1024];

  while ((size = fileInput.read(buffer, 0, 1024)) != -1) {

  outputData.write(buffer, 0, size);

  }

  outputData.close();

  fileInput.close();

  data.close();

  SendMessage(0, fileName.get(i) + " 发送完成" );

  }

  SendMessage(0, "所有文件发送完成" );

  } catch (Exception e) {

  SendMessage(0, "发送错误: " + e.getMessage());

  }

  }

  //待优化

  private void GetAllFiles(){

  fileList= new ArrayList();

  File rootPath= new File(Environment.getExternalStorageDirectory().getPath()+ FILE_PATH);

  File[] files = rootPath.listFiles(); // 列出所有文件

  for( int i=0;i

  if(files[i].isFile()){

  FileOptions fp= new FileOptions();

  fp. name=files[i].getName();

  fp. path=files[i].getPath();

  fp. size=files[i].length();

  fileList.add(fp);

  }

  }

  }

  }

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!