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. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. Android写文件到SDCard的简单代码
  4. Android手电筒小程序实现代码
  5. android ListView 的使用
  6. Android之Audio常用属性变量
  7. android中IO操作数据总结
  8. android 获取网络上服务器图片
  9. android 记得用mkdirs不要用mkdir

随机推荐

  1. Android之菜单总结
  2. android ndk编译x264开源(用于android的f
  3. [RK3399][Android7.1.1] WifiAp:开机默认
  4. 在Fragment中设置控件点击方法,执行失败。
  5. use ffmpeg to setup streaming server o
  6. Android系统启动流程(一)解析init进程启动
  7. Handler.post(action)方法
  8. [Android NDK]Android JNI开发例子 ---3
  9. Android studio3.x 多渠道打包apk
  10. Android Chromium WebView html js 开发