legongju.com
我们一直在努力
2025-01-08 18:28 | 星期三

C#使用TCP/IP传输大文件方法

在C#中,使用TCP/IP协议传输大文件可以通过分块读取和发送文件数据的方式实现。以下是一个简单的示例,展示了如何使用TCP/IP在C#中传输大文件:

首先,我们需要创建一个TCP服务器:

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;

class TcpServer
{
    public static void StartListening(int port)
    {
        TcpListener server = null;

        try
        {
            server = new TcpListener(IPAddress.Any, port);
            server.Start();

            Console.WriteLine("Server is listening on port " + port);

            while (true)
            {
                Console.WriteLine("Waiting for a client to connect...");
                TcpClient client = server.AcceptTcpClient();
                Console.WriteLine("Client connected.");

                NetworkStream stream = client.GetStream();

                // Read file and send it in chunks
                string fileName = "largefile.txt";
                using (FileStream fs = File.OpenRead(fileName))
                {
                    byte[] buffer = new byte[1024 * 1024]; // 1MB chunk size
                    int bytesRead;

                    while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        stream.Write(buffer, 0, bytesRead);
                    }
                }

                Console.WriteLine("File sent.");
                client.Close();
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.Message);
        }
        finally
        {
            if (server != null)
            {
                server.Stop();
            }
        }
    }
}

接下来,我们需要创建一个TCP客户端来接收文件:

using System;
using System.IO;
using System.Net.Sockets;

class TcpClient
{
    public static void Connect(string server, int port)
    {
        try
        {
            TcpClient client = new TcpClient(server, port);
            NetworkStream stream = client.GetStream();

            // Receive file in chunks and write it to disk
            string fileName = "received_largefile.txt";
            using (FileStream fs = File.Create(fileName))
            {
                byte[] buffer = new byte[1024 * 1024]; // 1MB chunk size
                int bytesRead;

                while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    fs.Write(buffer, 0, bytesRead);
                }
            }

            Console.WriteLine("File received.");
            client.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.Message);
        }
    }
}

最后,我们可以在主程序中启动服务器和客户端:

using System;

class Program
{
    static void Main(string[] args)
    {
        // Start server
        int port = 12345;
        TcpServer.StartListening(port);

        // Connect client
        string server = "127.0.0.1";
        TcpClient.Connect(server, port);
    }
}

这个示例中,服务器将大文件分成1MB大小的块,并通过网络流发送给客户端。客户端接收这些块并将它们写入到本地文件系统中。这种方法可以有效地传输大文件,而不会消耗大量内存。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/88985.html

相关推荐

  • c#的for循环中如何优化内存使用

    c#的for循环中如何优化内存使用

    在C#的for循环中优化内存使用,可以采取以下几种方法: 使用局部变量:在循环内部声明和使用变量,这样可以减少变量的作用域,从而减少内存占用。当循环结束时,...

  • c#的for循环中如何进行异常处理

    c#的for循环中如何进行异常处理

    在C#的for循环中进行异常处理,可以使用try-catch语句。将可能引发异常的代码放在try块中,然后在catch块中处理异常。这是一个示例:
    using System; class ...

  • c#的for循环中如何实现条件控制

    c#的for循环中如何实现条件控制

    在C#的for循环中,你可以使用条件语句(如if语句)来控制循环内部的执行。下面是一个示例:
    using System; class Program
    { static void Main() { for...

  • c#的for循环中如何处理大数据量

    c#的for循环中如何处理大数据量

    在C#中处理大数据量时,使用for循环可能会导致性能问题。为了解决这个问题,你可以采用以下方法: 分批处理:将大数据集分成较小的批次进行处理。这样可以减少内...

  • 在C#中TCP/IP数据如何加密

    在C#中TCP/IP数据如何加密

    在C#中,可以使用SSL/TLS协议对TCP/IP数据进行加密 首先,需要创建一个X.509证书。这个证书包含了公钥和私钥,用于加密和解密数据。可以使用证书颁发机构(CA)生...

  • C# TCP/IP连接怎样保持稳定

    C# TCP/IP连接怎样保持稳定

    为了确保C#中的TCP/IP连接稳定,可以采取以下几种方法: 使用合适的超时设置:在创建TcpClient对象时,可以设置连接超时和读写超时。这有助于在出现问题时及时发...

  • C#如何实现TCP/IP通信

    C#如何实现TCP/IP通信

    在C#中,可以使用System.Net.Sockets命名空间中的类来实现TCP/IP通信。下面是一个简单的示例,展示了如何创建一个TCP服务器和客户端进行通信。
    首先,我们创...

  • c#在flink实时计算中的应用

    c#在flink实时计算中的应用

    Apache Flink 是一个开源的流处理框架,它可以用于构建高性能、低延迟的实时数据流处理应用程序。Flink 提供了一个灵活的编程模型,支持多种编程语言,包括 Java...