国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android和PC端通過局域網文件同步

2019-10-21 21:46:18
字體:
來源:轉載
供稿:網友

本文為大家分享了AndroidPC端通過局域網文件同步的具體代碼,供大家參考,具體內容如下

public class FileOptions {   public String name;   public String path;   public long size;} //Activitypublic 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( "/n[" + 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<FileOptions> 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<String> fileName, ArrayList<String> 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, "發送錯誤:/n" + e.getMessage());      }   }   //待優化   private void GetAllFiles(){      fileList= new ArrayList<FileOptions>();      File rootPath= new File(Environment.getExternalStorageDirectory().getPath()+ FILE_PATH);      File[] files = rootPath.listFiles(); // 列出所有文件      for( int i=0;i<files. length;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);        }      }   }}

PC端用VS2005寫的。用了Json格式數據進行數據通信。主要用法為:在同一局域網內,打開PC端和Android端程序,按照Android端提示的IP地址及端口在PC端程序編輯框中正確輸入,點擊鏈接,即可將sd卡根目錄下的相關文件夾下的文件同步到PC端。

//PC端主要源碼//數據傳輸線程DWORD WINAPI RecvThread(LPVOID lpParameter){   SOCKET recvSocket = (SOCKET)lpParameter;    int ret = 0,strLen=0;    char recvBuffer[MAX_LEN],*pRecvAllData;   Json::Reader reader;   Json::Value jsonArr;       while ( true )   {       /*            */      pRecvAllData=( char *)malloc(MAX_LEN);       while ((ret = recv(recvSocket, recvBuffer, MAX_LEN, 0))>0){         strLen+=ret;         pRecvAllData=( char *)realloc(pRecvAllData,strLen);         memcpy(pRecvAllData+strLen-ret,recvBuffer,ret);      };             if (!reader.parse(pRecvAllData, jsonArr)){         Sleep(1000);          continue ;      }       int jsonSize = jsonArr.size();      CString strItem;      fileList.RemoveAll();       for (int j = 0; j < jsonSize; ++j)       {          std::string name = jsonArr[j][ "name" ].asString();         std::string path = jsonArr[j][ "path" ].asString();          int size = jsonArr[j][ "size" ].asInt();         strItem.Format(TEXT( "%d" ), j+1);         pFileRecvDlg->m_fileListCtrl.InsertItem(j,strItem.GetBuffer(0));         pFileRecvDlg->m_fileListCtrl.SetItemText(j,0,strItem.GetBuffer(0));         strItem=name.c_str();         fileStr filest;         filest.name=name;         filest.size=size;         fileList.AddTail(filest);         pFileRecvDlg->m_fileListCtrl.SetItemText(j,1,strItem.GetBuffer(0));      }      free(pRecvAllData);      closesocket(recvSocket);       CRect rect;      pFileRecvDlg->GetClientRect(&rect);      pFileRecvDlg->ClientToScreen(rect);       if (!pProgressDlg->IsWindowVisible()){         pProgressDlg->ShowWindow(SW_SHOW);      }      pProgressDlg->SetWindowPos(NULL,rect.left+100,rect.top+100,0,0,SWP_NOSIZE);      pFileRecvDlg->GetDlgItem(IDC_BUTTON_CONNECT)->EnableWindow(FALSE);       // 發送文件名       for (int i=0;i<jsonSize;i++){         SOCKET nameSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);          int ret = connect(nameSocket,( struct sockaddr*)&ServerAddr, sizeof (ServerAddr));          if ( ret == SOCKET_ERROR ){            AfxMessageBox(_T( "connect 失敗 "));         } else {         }         FILE *fp;          int tempCount=0;         fileStr flst=fileList.GetAt(fileList.FindIndex(i));         fopen_s(&fp,flst.name.c_str(), "wb+" );                  pProgressDlg->setFile(flst.name,flst.size);          while ((ret = recv(nameSocket, recvBuffer, MAX_LEN, 0))!=0){            fwrite(recvBuffer, sizeof (char ),ret,fp);            tempCount+=ret;            pProgressDlg->updateProgress(tempCount);         }         _fcloseall( );         closesocket(nameSocket);      }      pFileRecvDlg->GetDlgItem(IDC_BUTTON_CONNECT)->EnableWindow(TRUE);      pProgressDlg->ShowWindow(SW_HIDE);   }    return 0;}//連接按鈕的響應函數void CGlassFileRecvDlg::OnBnClickedButtonConnect(){    // TODO: 在此添加控件通知處理程序代碼    if (UpdateData()){      BYTE nField0,nField1,nField2,nField3;      m_IpAddrCtrl.GetAddress(nField0,nField1,nField2,nField3);      WSADATA Ws;      SOCKET CientSocket;       int Ret = 0;       int AddrLen = 0;      HANDLE hThread = NULL;       char SendBuffer[MAX_PATH];        //Init Windows Socket       if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )      {          return ;      }       //Create Socket      CientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);       if ( CientSocket == INVALID_SOCKET )      {         MessageBox(_T( "socket 創建失敗 " ));          return ;      }        char strAddr[50],tempStr[10];      memset(strAddr,0, sizeof (strAddr));      memset(tempStr,0, sizeof (tempStr));      itoa(nField0,tempStr,10);      strcat(strAddr,tempStr);      strcat(strAddr, "." );      itoa(nField1,tempStr,10);      strcat(strAddr,tempStr);      strcat(strAddr, "." );      itoa(nField2,tempStr,10);      strcat(strAddr,tempStr);      strcat(strAddr, "." );      itoa(nField3,tempStr,10);      strcat(strAddr,tempStr);       ServerAddr.sin_family = AF_INET;      ServerAddr.sin_addr.s_addr = inet_addr(strAddr);      ServerAddr.sin_port = htons(m_port);      memset(ServerAddr.sin_zero, 0x00, 8);       Ret = connect(CientSocket,( struct sockaddr*)&ServerAddr, sizeof (ServerAddr));       if ( Ret == SOCKET_ERROR ){         MessageBox(_T( "connect 失敗 "));          return ;      } else {         HANDLE hThread = CreateThread(NULL, 0, RecvThread, (LPVOID)CientSocket, 0, NULL);          if ( hThread == NULL ){            MessageBox(_T( " 創建線程失敗 "));             return ;         }         CloseHandle(hThread);      }   }}

源碼下載地址為:android端與PC端文件同步

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长阳| 台东市| 含山县| 定安县| 玉林市| 化德县| 山阳县| 宁化县| 平安县| 康保县| 安达市| 福鼎市| 平阴县| 仪征市| 镇赉县| 汉川市| 额济纳旗| 元氏县| 昭通市| 古丈县| 德昌县| 喀喇| 张家川| 于都县| 建始县| 天全县| 金门县| 宜兴市| 秭归县| 正安县| 玉溪市| 永川市| 惠东县| 大埔区| 眉山市| 太和县| 新丰县| 伊吾县| 镇宁| 闸北区| 建德市|