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

avatar
作者
筋斗云
阅读量:0

在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大小的块,并通过网络流发送给客户端。客户端接收这些块并将它们写入到本地文件系统中。这种方法可以有效地传输大文件,而不会消耗大量内存。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!