如何通过TCP接收使用套接字发送的文件.FileSend方法

本文关键字:文件 方法 FileSend 套接字 TCP 何通过 | 更新日期: 2023-09-27 18:19:07

我有一个客户端应用程序和一个服务器应用程序。

我想从一台机器发送一个文件到另一台机器,所以它似乎是套接字。FileSend方法正是我要找的。

但是由于没有FileReceive方法,我应该在服务器端做什么来接收文件?(我的问题是,因为文件将有一个可变的大小,并将大于任何缓冲区,我可以创建GB顺序…)

如何通过TCP接收使用套接字发送的文件.FileSend方法

在服务器端,您可以使用TcpListener,一旦客户端连接,读取流块并将其保存到文件:

class Program
{
    static void Main()
    {
        var listener = new TcpListener(IPAddress.Loopback, 11000);
        listener.Start();
        while (true)
        {
            using (var client = listener.AcceptTcpClient())
            using (var stream = client.GetStream())
            using (var output = File.Create("result.dat"))
            {
                Console.WriteLine("Client connected. Starting to receive the file");
                // read the file in chunks of 1KB
                var buffer = new byte[1024];
                int bytesRead;
                while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    output.Write(buffer, 0, bytesRead);
                }
            }
        }
    }
}

就发送而言,您可以查看SendFile方法文档中提供的示例。

话虽这么说,你也可以看看一个更健壮的解决方案,那就是使用WCF。有一些协议,比如MTOM,专门针对通过HTTP发送二进制数据进行了优化。与依赖非常低级的套接字相比,它是一个更健壮的解决方案。您将不得不处理诸如文件名,大概是元数据,…

您需要使用Socket。接收或Socket。BeginReceive