基于socket实现Android端和PC端服务器多文件传输

本文介绍如何通过socket实现Android设备与PC服务器之间的多文件传输。首先确保手机与服务器建立socket连接,实现单文件传输,接着设计通讯协议以指示何时开始接收新的文件,最终实现连续传输多个文件的功能。参考了相关博客资源并提供了Android端和服务器端的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为最近项目需要将多个文件传输到服务器,看了很多博客。先是实现手机和服务器的连接,然后达到可以传输一个文件,最后就是做到多文件的传输。总的来说,就是要自定义一条通讯协议,告诉服务器什么时候开始接收第一个文件,什么时候接收完了第一个文件,什么时候开始接收第二个文件,以此类推

socket连接并且传输一个文件 参考下面网址,但是其连接代码应该放在工作线程中

http://blog.youkuaiyun.com/ameyume/article/details/8146143

传输多个文件参考以下网址

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
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值