Android实现TCP断点上传 后台C#服务接收

服务端C#代码示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace TcpServerDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpListener tcpListener = new TcpListener(System.Net.IPAddress.Parse("127.0.0.1"), 9999);
            tcpListener.Start();
            Console.WriteLine("服务端开始监听.....");
            while (true)
            {
                var client = tcpListener.AcceptTcpClient();
                var endpoint = client.Client.RemoteEndPoint.ToString();
                Console.WriteLine(endpoint + "已连接服务端");
                byte[] buffer = new byte[1024];
                int len = client.Client.Receive(buffer);
                Console.WriteLine("接收长度为:" + len);
                string str = Encoding.UTF8.GetString(buffer, 0, len);
                Console.WriteLine("接收到数据为:" + str);
            }
        }
    }
}

客户端Android代码示例:

import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

public class MainActivity extends AppCompatActivity {
    //上传文件
    private void uploadFile(String host, int port, String path, String fileName, long startPosition) {
        Socket socket = null;
        OutputStream outputStream = null;
        FileInputStream fileInputStream = null;
        try {
            socket = new Socket(InetAddress.getByName(host), port);
            outputStream = socket.getOutputStream();
            fileInputStream = new FileInputStream(new File(path, fileName));
            long skipSize = fileInputStream.skip(startPosition);
            Log.d("Socket", "跳过长度为:" + skipSize);
            byte[] buffer = new byte[1024 * 1024];
            int len = 0;
            while ((len = fileInputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, len);
            }
            outputStream.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (outputStream != null) {
                    outputStream.close();
                }
                if (fileInputStream != null) {
                    fileInputStream.close();
                }
                if (socket != null) {
                    socket.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

实现TCP断点上传后台C#服务接收的完整攻略:

1.服务端开启TCP监听:在服务端上编写监听端口的代码,等待客户端连接。

2.客户端进行TCP连接:使用Socket进行服务端连接并跳过已经上传的文件内容。

3.客户端将需要上传的文件进行分块:由于文件可能非常大,所以需要将文件按照固定大小进行分块,同时记录已经上传的位置,便于下次上传时进行文件位置的跳过。

4.客户端将分块的文件上传到服务端:使用Socket传输分块后的文件数据。

5.服务端接收到数据并存储:服务端接收到客户端传输的数据并进行存储,同时对于已经存储的数据进行断点判断,便于下次接收继续添加。

6.客户端继续上传:如果客户端判断还有未上传完的数据,则继续进行分块上传,避免重复上传数据。

代码示例1:服务端C#代码

代码示例2:客户端Android代码

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android实现TCP断点上传 后台C#服务接收 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • C#调用WebService实例开发

    C#调用WebService实例开发攻略 1. 创建Web Service 1.1 使用Visual Studio创建Web Service 在Visual Studio中,选择“文件”->“新建”->“项目”,在“新建项目”窗口中,选择“ASP.NET Web服务应用程序”作为项目类型,输入项目名称,点击“确定”按钮创建项目。在新建项目的过程中…

    C# 2023年6月6日
    00
  • C#通过System.CommandLine快速生成支持命令行的应用程序

    接下来将为你详细讲解如何通过System.CommandLine来快速生成支持命令行的应用程序。 1. 什么是System.CommandLine System.CommandLine是用于构建命令行界面(CLI)的.NET库。它允许您快速创建参数化的命令行应用程序(如dotnet cli),同时可自动处理帮助和明确定义的参数、选项和子命令。如果您曾经使用过…

    C# 2023年6月7日
    00
  • Unity3d怎么从物体向前方发射一条射线?

    Unity3D是一个游戏引擎,支持开发2D和3D游戏。在游戏开发中,常常需要使用射线来进行碰撞检测、瞄准、摄像机跟随等操作。本文将详细讲解在Unity3D中如何从物体向前方发射一条射线。 1. 获取射线起点和方向 使用射线需要明确射线的起点和方向,Unity3D提供了Transform组件的position属性来获取起点,可以使用Transform组件的fo…

    C# 2023年6月3日
    00
  • C#调用百度API实现活体检测的方法

    C#调用百度API实现活体检测是一个可以应用在人脸识别等领域的重要技术。本攻略将会介绍如何使用百度AI开发平台的活体检测API,并给出两个详细的示例。 步骤一:注册百度AI开发平台 在使用百度API前,需要先注册百度AI开发平台账号,完成OAuth2.0认证。 打开百度AI开发平台首页,点击右上角“注册”按钮,创建账号。 登录账号后,进入“控制台”页面,在“…

    C# 2023年5月31日
    00
  • .NET Core部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx 或 Jexus)

    在前两篇: .NET Core部署到linux(CentOS)最全解决方案,常规篇 .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx) 我们对.netcore部署到linux有了一个充分的了解,已经可以满足应用要求了,这篇文章我们继续深入带你了解使用Doker+jexus或Nginx来部署.net co…

    C# 2023年4月30日
    00
  • MongoDB数据库介绍并用.NET Core对其进行编码

    MongoDB是一种文档数据库,它以BSON(二进制JSON)为数据存储格式,支持索引、联表查询和文档级锁定等特性。下面将为大家详细介绍MongoDB数据库,并提供两条.NET Core编码示例。 MongoDB数据库介绍 MongoDB的优点 数据以文档形式存储 BSON格式的数据存储格式 支持动态查询语言 可伸缩性强 可自身提供容错保护 支持二进制数据存…

    C# 2023年6月3日
    00
  • C# 7.0之ref locals and returns(局部变量和引用返回)

    C# 7.0 中引入了一项新特性:ref locals and returns(局部变量和引用返回)。这一特性允许我们在局部范围内,将变量声明为引用类型,并且可以使用引用来访问该变量。这一特性适用于方法、函数和属性的返回类型,以及数组、元组和结构体中的字段。下面我们来详细讲解这一特性。 声明局部变量为引用类型 int[] numbers = { 1, 2, …

    C# 2023年6月7日
    00
  • C# String.IndexOf()方法: 搜索指定的字符串并返回它的第一个匹配项的索引

    String.IndexOf()方法用于返回字符串中第一次出现指定字符或子字符串的位置,如果没有找到则返回-1。以下是该方法的具体参数和使用方法。 参数 String.IndexOf()方法接受一个字符串类型的参数,表示要在当前字符串中查找的目标字符或子字符串,也可以接受一个可选的整数类型的参数start,表示查找的起始位置,默认为 0。 语法 public…

    C# 2023年4月19日
    00
合作推广
合作推广
分享本页
返回顶部