长理培训真题库
我的
军队文职考试一本通

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

2020-01-21 11:07
具体实现代码如下 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); };
温馨提示:当前文档最多只能预览 4 页,此文档共9 页,请下载原文档以浏览全部内容。如果当前文档预览出现乱码或未能正常浏览,请先下载原文档进行浏览。
Android和PC端通过局域网文件同步用代码怎么实现 第 1 页Android和PC端通过局域网文件同步用代码怎么实现 第 2 页Android和PC端通过局域网文件同步用代码怎么实现 第 3 页Android和PC端通过局域网文件同步用代码怎么实现 第 4 页

下载提示

1 该文档不包含其他附件(如表格、图纸),本站只保证下载后内容跟在线阅读一样,不确保内容完整性,请务必认真阅读

2 除PDF格式下载后需转换成word才能编辑,其他下载后均可以随意编辑修改

3 有的标题标有”最新”、多篇,实质内容并不相符,下载内容以在线阅读为准,请认真阅读全文再下载

4 该文档为会员上传,版权归上传者负责解释,如若侵犯你的隐私或权利,请联系客服投诉

最近更新

热门排行