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#实现乱码视频效果

    基于C#实现乱码视频效果攻略 背景介绍 乱码视频是一种通过修改视频文件的二进制数据来实现的视频效果,看起来像是视频画面出现了故障、损坏或者失真。这种效果在一些电影、音乐视频和MV中经常被使用,可以让视频更具有艺术感和实验性。本文将介绍如何使用C#编程语言实现乱码视频效果。 实现步骤 了解乱码视频的原理和实现方式:乱码视频通过修改视频文件的二进制数据,使视频画…

    C# 2023年6月6日
    00
  • C#通过标签软件Bartender的ZPL命令打印条码

    下面我将详细讲解“C#通过标签软件Bartender的ZPL命令打印条码”的完整攻略。 1. Bartender软件的安装和使用 Bartender是一款功能强大的标签设计和打印软件,可以用于创建各种类型的标签和条码。首先需要在官网下载Bartender的安装包并完成安装。 使用Bartender进行标签设计和打印的具体流程如下: 打开Bartender软件…

    C# 2023年6月6日
    00
  • C# 使用WPF 用MediaElement控件实现视频循环播放

    下面是关于“C#使用WPF用MediaElement控件实现视频循环播放”的完整攻略,包含两个示例。 1. WPF和MediaElement控件简介 WPF是一种用于创建Windows桌面应用程序的技术,它提供了一种基于XAML的用户界面设计语言。MediaElement控件是WPF中的一个控件,它可以用于播放音频和视频文件。 2. 使用MediaEleme…

    C# 2023年5月15日
    00
  • 如何搭建新的WPF项目框架

    如何搭建新的WPF项目框架 搭建新的WPF项目框架可以帮助我们更好地组织和管理WPF应用程序的代码。本文将提供详细的“如何搭建新的WPF项目框架”的完整攻略,包括如何创建项目结构、如何添加基础类以及两个示例。 创建项目结构 要创建新的WPF项目框架,我们需要执行以下步骤: 创建一个新的WPF应用程序项目。 在项目中创建一个名为“Infrastructure”…

    C# 2023年5月15日
    00
  • .NET Core部署为Windows服务的详细步骤

    以下是.NET Core部署为Windows服务的详细步骤: 1. 什么是Windows服务 Windows服务是一种在后台运行的,它可以在Windows操作系统启动时自动启动,并在系统运行时一直运行。Windows服务通常用于执行后台任务,例如监视文件夹、处理消息队列等。 2. 什么是.NET Core .NET Core是微软的一个跨平台开发框架,它支持…

    C# 2023年5月12日
    00
  • C#中char和string的入门使用教程

    C#中char和string的入门使用教程 什么是char和string? 在C#中,char和string都是用来表示文本字符的数据类型。其中,char表示一个单一的字符(注意,是单引号扩起来的字符),而string则表示一串字符(双引号扩起来的字符串)。 char的使用 定义和初始化 定义一个char变量的方式是: char myChar; 同样,我们也…

    C# 2023年6月7日
    00
  • C# Path.GetDirectoryName – 获取路径中的目录部分

    Path.GetDirectoryName是C#中一个静态方法,用于获取文件路径的目录名。 方法签名 public static string GetDirectoryName(string path); 参数说明 path:要获取目录名的文件路径(包括文件名或文件夹名)。 返回值说明 如果成功获取到目录名,返回目录名字符串,否则返回null。 使用方法 示…

    C# 2023年4月19日
    00
  • C#调用C++DLL传递结构体数组的终极解决方案

    下面是详细讲解“C#调用C++DLL传递结构体数组的终极解决方案”。 背景 在C#中调用C++的DLL过程中,经常会遇到需要传递结构体数组的情况。但是在传递结构体数组时,不同的编译器和不同的语言之间存在着一些细节上的差异,导致在传递结构体数组时会出现一些问题。本文将详细介绍如何解决这些问题,实现C#调用C++DLL传递结构体数组。 准备工作 在开始之前,我们…

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