我有一个客户端应用程序和一个服务器。
我想将一个文件从一台机器发送到另一台机器,所以看起来套接字。FileSend方法正是我正在寻找的。 p>
但是由于没有FileReceive方法,我应该在服务器端做什么来接收文件? (我的问题是因为文件将具有可变大小,并且将比我可以创建GB顺序的任何缓冲区大...)
答案 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)