因为最近项目需要将多个文件传输到服务器,看了很多博客。先是实现手机和服务器的连接,然后达到可以传输一个文件,最后就是做到多文件的传输。总的来说,就是要自定义一条通讯协议,告诉服务器什么时候开始接收第一个文件,什么时候接收完了第一个文件,什么时候开始接收第二个文件,以此类推
socket连接并且传输一个文件 参考下面网址,但是其连接代码应该放在工作线程中
传输多个文件参考以下网址
http://blog.youkuaiyun.com/tiankongzaiweixiao/article/details/26083439?locationNum=13&fps=1
再说说我要实现的吧!附上一张图片:
不多说看Android端代码
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class MainActivity extends Activity implements View.OnClickListener{
private static final String TAG = "Socket_Android";
private EditText mEditText = null;
private TextView tx1 = null;
private Button mButton = null;
private ImageView imageView=null;
private ImageView imageView1=null;
private final String First_Image_Start="begin0:";
private final String First_Image_End="end0:";
private final String Second_Image_Start="begin1:";
private final String Second_Image_End="end1:";
private final String First_Text_Start="begin2:";
private final String Second_Text_Start="begin3:";
private final String First_Text_End="end2:";
private final String Second_Text_End="end3:";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.imageView);
imageView1 = (ImageView) findViewById(R.id.imageView1);
mButton = (Button) findViewById(R.id.button);
mButton.setOnClickListener(this);
try {
String filename = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "CameraPhoto";
FileInputStream file = new FileInputStream(filename + File.separator + "picture.jpg");
FileInputStream file1 = new FileInputStream(filename + File.separator + "qrcode.jpg");
Bitmap bitmap = BitmapFactory.decodeStream(file);
Bitmap bitmap1 = BitmapFactory.decodeStream(file1);
Matrix matrix = new Matrix();
matrix.setRotate(90);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
bitmap1 = Bitmap.createBitmap(bitmap1, 0, 0, bitmap1.getWidth(),
bitmap1.getHeight(), matrix, true);
imageView.setImageBitmap(bitmap);
imageView1.setImageBitmap(bitmap1);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
setTitle("测试Socket连接");
new myThread().start();
}
class myThread extends Thread{
//新开一个工作线程
public void run() {
int length = 0;
File[] file=new File[4];
Socket socket = null;
DataOutputStream dos = null;
FileInputStream fis = null;
String filename = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "CameraPhoto" ;
try {
try {
socket = new Socket("********", 3333);
dos = new DataOutputStream(socket.getO