首页 > 代码库 > Android 用Socket实现PC和手机的文件传输
Android 用Socket实现PC和手机的文件传输
PC服务器端代码:
/* * PC与<a href="http://www.mamicode.com/http://lib.csdn.net/base/android" class=‘replace_word‘ title="Android知识库" target=‘_blank‘ style=‘color:#df3434; font-weight:bold;‘>Android</a>客户端实现文件的传送 * PC服务器端 */package com.<a href=http://www.mamicode.com/"http://lib.csdn.net/base/android" class=‘replace_word‘ title="Android知识库" target=‘_blank‘ style=‘color:#df3434; font-weight:bold;‘>android</a>.test;import <a href=http://www.mamicode.com/"http://lib.csdn.net/base/java" class=‘replace_word‘ title="Java 知识库" target=‘_blank‘ style=‘color:#df3434; font-weight:bold;‘>Java</a>.io.BufferedInputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java<a href=http://www.mamicode.com/"http://lib.csdn.net/base/dotnet" class=‘replace_word‘ title=".NET知识库" target=‘_blank‘ style=‘color:#df3434; font-weight:bold;‘>.NET</a>.ServerSocket;import java<a href=http://www.mamicode.com/"http://lib.csdn.net/base/dotnet" class=‘replace_word‘ title=".NET知识库" target=‘_blank‘ style=‘color:#df3434; font-weight:bold;‘>.net</a>.Socket;public class TransferFileServer { private static final int HOST_PORT = 8821; private void start() { Socket s = null; try { ServerSocket ss = new ServerSocket(HOST_PORT); while (true) { String filePath = "/home/fan/Pictures/1.jpg"; File file = new File(filePath); System.out.println("文件长度:" + (int) file.length()); s = ss.accept(); log("建立Socket连接"); DataInputStream dis = new DataInputStream( new BufferedInputStream(s.getInputStream())); dis.readByte(); DataInputStream fis = new DataInputStream( new BufferedInputStream(new FileInputStream(filePath))); DataOutputStream dos = new DataOutputStream(s.getOutputStream()); dos.writeUTF(file.getName()); dos.flush(); dos.writeLong((long) file.length()); dos.flush(); int bufferSize = 8192; byte[] buf = new byte[bufferSize]; while (true) { int read = 0; if (fis != null) { read = fis.read(buf); } if (read == -1) { break; } dos.write(buf,0,read); } dos.flush(); // 注意关闭socket链接哦,不然客户端会等待server的数据过来, // 直到socket超时,导致数据不完整。 fis.close(); s.close(); log("文件传输完成"); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } void log(String msg) { System.out.println(msg); } public static void main(String args[]) { new TransferFileServer().start(); }}
ClientSocket:辅助类
/* * PC与Android文件传输 * Android客户端 */package com.android.test;import java.io.BufferedInputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java<a href=http://www.mamicode.com/"http://lib.csdn.net/base/dotnet" class=‘replace_word‘ title=".NET知识库" target=‘_blank‘ style=‘color:#df3434; font-weight:bold;‘>.Net</a>.Socket;import java.net.UnknownHostException;public class ClientSocket { private String ip; private int port; private Socket socket = null; DataOutputStream out = null; DataInputStream getMessageStream = null; public ClientSocket(String ip, int port) { this.ip = ip; this.port = port; } public void createConnection() { try { socket = new Socket(ip, port); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); if (socket != null) { try { socket.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); if (socket != null) { try { socket.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } finally { } } public void sendMessage(String sendMessage) { try { out = new DataOutputStream(socket.getOutputStream()); if (sendMessage.equals("Windows")) { out.writeByte(0x1); out.flush(); return; } if (sendMessage.equals("Unix")) { out.writeByte(0x2); out.flush(); return; } if (sendMessage.equals("<a href=http://www.mamicode.com/"http://lib.csdn.net/base/linux" class=‘replace_word‘ title="Linux知识库" target=‘_blank‘ style=‘color:#df3434; font-weight:bold;‘>Linux</a>")) { out.writeByte(0x3); out.flush(); } else { out.writeUTF(sendMessage); out.flush(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); if (out != null) { try { out.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } } public DataInputStream getMessageStream() { try { getMessageStream = new DataInputStream(new BufferedInputStream( socket.getInputStream())); // return getMessageStream; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); if (getMessageStream != null) { try { getMessageStream.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } return getMessageStream; } public void shutDownConnection() { try { if (out != null) { out.close(); } if (getMessageStream != null) { getMessageStream.close(); } if (socket != null) { socket.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
Android客户端:Acitivyt实现:
package com.android.test;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.FileOutputStream;import java.io.IOException;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class Main extends Activity implements OnClickListener{ private ClientSocket cs = null; private static final String FILE_PATH = "/mnt/sdcard/"; private String ip = "192.168.1.103"; private int port = 8821; private String sendMessage = "<a href=http://www.mamicode.com/"http://lib.csdn.net/base/linux" class=‘replace_word‘ title="Linux知识库" target=‘_blank‘ style=‘color:#df3434; font-weight:bold;‘>linux</a>"; private Button mButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mButton = (Button)findViewById(R.id.start); mButton.setOnClickListener(this); } private void start() { if (createConnection()) { sendMessage(); getMessage(); } } private void getMessage() { if (cs == null) return; DataInputStream inputStream = null; inputStream = cs.getMessageStream(); try { String savePath = FILE_PATH; int bufferSize = 8192; byte[] buf = new byte[bufferSize]; int passedlen = 0; long len = 0; savePath += inputStream.readUTF(); Log.d("AndroidClient","@@@savePath"+savePath); DataOutputStream fileOut = new DataOutputStream( new BufferedOutputStream(new BufferedOutputStream( new FileOutputStream(savePath)))); len = inputStream.readLong(); Log.d("AndoridClient","文件的长度为:"+len); Log.d("AndroidClient","开始接收文件"); while(true) { int read = 0; if (inputStream != null) { read = inputStream.read(buf); } passedlen += read; if (read == -1) { break; } Log.d("AndroidClient","文件接收了"+(passedlen*100/len)+"%/n"); fileOut.write(buf,0,read); } Log.d("AndroidClient","@@@文件接收完成"+savePath); fileOut.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void sendMessage() { if (cs == null) return; cs.sendMessage(sendMessage); } private boolean createConnection() { cs = new ClientSocket(ip, port); cs.createConnection(); Log.d("Main", "连接服务器成功:"); return true; } public void onClick(View v) { start(); }}
Android 用Socket实现PC和手机的文件传输
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。