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