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 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
//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;isetFile(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);            }      }}
源码下载地址为:



更多相关文章

  1. 【Android】播放视频的简易播放器源码
  2. android 根据apk文件路径获取图标
  3. Android 子线程 更新 UI 界面 总结
  4. Android SD卡文件列表
  5. android练习一之获取网页源码
  6. AndroidManifest.xml配置文件选项详解
  7. android--------根据文件路径使用File类获取文件相关信息

随机推荐

  1. Android(安卓)清除所有Notification的一
  2. “layer-list” 和 “include”的使用
  3. Android中ListView下拉刷新的实现代码
  4. android中怎么画统计图
  5. Mono for Android(安卓)(4)-- 图片转为二进
  6. android定时任务的几种实现方式
  7. android P 添加自定义系统属性,并监听变化
  8. Linux 之 Yum 仓库的配置及使用
  9. Android(安卓)实现文字按照路径曲线显示
  10. 关于Service的使用