如何获取文件名?

时间:2015-05-25 18:59:12

标签: c# sockets client server sendfile

我正在尝试发送* .pdf文件并将其保存在第二台计算机上。我使用以下代码发送:

IPHostEntry ipHost = Dns.GetHostEntry("127.0.0.1");
IPAddress  ipAddr = ipHost.AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000);

Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

client.Connect(ipEndPoint);

Console.WriteLine("Sending {0} to the host.", fileName);
client.SendFile(file);

client.Shutdown(SocketShutdown.Both);
client.Close();

然后保存文件:

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("C:/ODEBRANE/result.pdf"))
    {
        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);
        }
    }
}

现在,问题是,如何获得与客户端相同的文件名?没有将其重命名为“结果”?有没有可能用文件发送该名称并在服务器端使用它?

1 个答案:

答案 0 :(得分:0)

可以引入“文件头”来解决问题。 “文件头”数据结构应包含所需信息(至少是文件大小,例如文件名)。让我们考虑以下流程来演示这个想法:

  1. 客户端首先发送“文件头”(适当填充),然后发送文件内容。
  2. 服务器接收“文件头”,并且知道文件大小,接收文件内容。