• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學習啦 > 學習電腦 > 網絡知識 > 網絡基礎知識 >

    Android和PC端通過局域網文件同步用代碼怎么實現

    時間: 加城1195 分享

      局域網通常是分布在一個有限地理范圍內的網絡系統,一般所涉及的地理范圍只有幾公里。局域網專用性非常強,具有比較穩定和規范的拓撲結構。這篇文章主要為大家詳細介紹了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( "\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 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, "發送錯誤:\n" + 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);

      }

      }

      }

      }

      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

      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);

      }

      }

      }

      補充:局域網、校園網安全維護方法

      校園網絡分為內網和外網,就是說他們可以上學校的內網也可以同時上互聯網,大學的學生平時要玩游戲購物,學校本身有自己的服務器需要維護;

      在大環境下,首先在校園網之間及其互聯網接入處,需要設置防火墻設備,防止外部攻擊,并且要經常更新抵御外來攻擊;

      由于要保護校園網所有用戶的安全,我們要安全加固,除了防火墻還要增加如ips,ids等防病毒入侵檢測設備對外部數據進行分析檢測,確保校園網的安全;

      外面做好防護措施,內部同樣要做好防護措施,因為有的學生電腦可能帶回家或者在外面感染,所以內部核心交換機上要設置vlan隔離,旁掛安全設備對端口進行檢測防護;

      內網可能有ddos攻擊或者arp病毒等傳播,所以我們要對服務器或者電腦安裝殺毒軟件,特別是學校服務器系統等,安全正版安全軟件,保護重要電腦的安全;

      對服務器本身我們要安全server版系統,經常修復漏洞及更新安全軟件,普通電腦一般都是撥號上網,如果有異常上層設備監測一般不影響其他電腦。做好安全防范措施,未雨綢繆。


    Android和PC端通過局域網文件同步用代碼怎么實現相關文章:

    1.同一無線局域網怎么用安卓設備訪問pc共享文件

    2.沒有網怎么用局域網進行手機電腦文件傳輸

    3.安卓手機怎么樣共享電腦局域網文件

    4.安卓系統在局域網下如何訪問pc共享文件

    5.android局域網怎么傳文件

    4051392 主站蜘蛛池模板: 久久精品人人槡人妻人人玩| 亚洲av无码片区一区二区三区| 在线视频网址免费播放| 红色一片免费高清影视| 99这里只有精品| 亚洲激情视频图片| 国产精品午夜爆乳美女视频| 推油少妇久久99久久99久久| 真人无码作爱免费视频| 亚洲欧美成aⅴ人在线观看| 国产三级a三级三级| 两个人一上一下剧烈运动| 波多野结衣大片| 国产真乱全集mangent| 久久久久久久久蜜桃| 精品无码久久久久国产| 在线一区二区观看| 久久高清一区二区三区| 美国式禁忌3在线观看| 在公车上忘穿内裤嗯啊色h文| 亚洲av中文无码乱人伦| 色与欲影视天天看综合网| 在线视频网站WWW色| 亚洲13又紧又嫩又水多| 一级成人黄色片| 精品欧洲AV无码一区二区男男| 天堂√在线中文官网在线| 亚洲av极品无码专区在线观看 | 进击的巨人第五季樱花免费版| 性色AV一区二区三区夜夜嗨| 亚洲欧美卡通另类| 青青草免费在线视频| 大学生日嘛批1| 久久精品女人毛片国产| 精品国产_亚洲人成在线| 国产精品午夜无码av体验区| 中文字幕在线播放| 欧美日韩免费在线| 国产mv在线天堂mv免费观看| 91香蕉短视频| 拍拍拍无挡视频免费观看1000|