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#纯技术之Class写入Json

    Sure! 首先我们需要明确一下,使用C#将对象序列化为Json只需要两个步骤: 定义对象模型 序列化对象为Json 在这个过程中,我们使用到了C#语言自带的Json库 Newtonsoft.Json (也称为Json.Net)。 如果你还没有安装这个库,可以在NuGet中搜索这个名称,然后安装。 下面我将为你详细讲解如何使用这个库将一个C#类序列化为Jso…

    C# 2023年5月31日
    00
  • ASP.NET MVC扩展HtmlHelper方法

    ASP.NET MVC是一种基于模型-视图-控制器(Model-View-Controller,MVC)架构的Web应用程序框架。在ASP.NET MVC中,视图是一个HTML模板,在视图中我们经常会使用HTML标签,其中包括表单元素、链接、图片以及其他相关的标签。ASP.NET MVC内置了一个HtmlHelper类,用于生成HTML,但是这个类所提供的方…

    C# 2023年5月31日
    00
  • 解析ASP.NET Core中Options模式的使用及其源码

    解析ASP.NET Core中Options模式的使用及其源码攻略 ASP.NET Core中Options模式是一种用于配置应用程序的机制。在本攻略中,我们将深入讨Options模式的使用及其源码,并提供两个示例说明。 Options模式的使用 在ASP.NET Core中,Options模式是一种用于配置应用程序的机制。Options模式允许您将配置数据…

    C# 2023年5月17日
    00
  • C#中的HttpWebRequest类介绍

    C#中的HttpWebRequest类介绍 简介 HttpWebRequest 是一个在 C# 中用来创建 HTTP 请求的类。它允许我们通过 HTTP 协议与远程服务器通信,并获取/发送数据。 使用 创建请求对象 要使用 HttpWebRequest,我们首先需要创建请求对象。可以通过以下方式进行: HttpWebRequest request = (Ht…

    C# 2023年6月1日
    00
  • 总结C#网络编程中对于Cookie的设定要点

    下面是总结C#网络编程中对于Cookie的设定要点的完整攻略: 什么是Cookie 在浏览器中,Cookie 是一种存储在客户端计算机上的小文本文件。通过使用Cookie,服务器可以向浏览器发送指令,以便为特定用户和页面提供有关该用户的信息。例如,网站可以使用 Cookie 持久存储用户名和密码信息,以便用户不必每次访问网站时都进行登录。 在 C# 的网络编…

    C# 2023年5月15日
    00
  • 基于C# 写一个 Redis 数据同步小工具

    下面我会详细的介绍“基于C# 写一个 Redis 数据同步小工具”的完整攻略: 简介 Redis是一种基于内存的数据结构存储系统,常用于缓存、消息队列和数据存储等场景。在不同的应用场景中,我们经常需要将 Redis中的数据同步至其他系统。本文将介绍使用C#编写一个Redis数据同步小工具。 安装 Redis 首先需要在本地安装Redis,Redis官网上提供…

    C# 2023年5月31日
    00
  • .NET中堆栈和堆的特点与差异介绍

    在.NET中,堆和栈是两种常见的内存分配方式。堆和栈的特点和差异如下: 堆的特点 堆是一种动态分配的内存区域,用于存储对象和数据结构。 堆的大小可以动态增长或缩小,由垃圾回收器负责管理。 堆中的对象可以通过引用来访问,引用是指向对象在堆中的地址。 堆中的对象可以被多个线程共享。 堆中的对象的生命周期由垃圾回收器来管理。 栈的特点 栈是一种静态分配的内存区域,…

    C# 2023年5月17日
    00
  • asp.net生成静态后冗余代码,去掉viewstate生成的代码

    下面我将为你详细讲解如何在ASP.NET中生成静态页面时去掉ViewState生成的冗余代码。 示例一:使用Web.config配置 打开你的ASP.NET Web应用程序的Web.config文件 添加以下配置节到元素下 <system.web> <pages> <tagPrefix="MyCustomPrefix&…

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