如何通过使用socket.FileSend方法发送的TCP文件

时间:2011-12-28 12:34:48

标签: c# file

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

我想将一个文件从一台机器发送到另一台机器,所以看起来套接字。FileSend方法正是我正在寻找的。

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

2 个答案:

答案 0 :(得分:11)

在服务器端,您可以使用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发送二进制数据进行了优化。与依赖非常低级别的套接字相比,它是一种更强大的解决方案。您将不得不处理诸如文件名,可能是元数据之类的东西......现有协议中已经考虑过的事情。

答案 1 :(得分:0)