Как получить имя файла?
Я пытаюсь отправить файл *.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 ответ
"Заголовок файла" может быть введен для решения проблемы. Структура данных "заголовок файла" должна содержать необходимую информацию (как минимум, размер файла и, например, имя файла). Давайте рассмотрим следующий поток, чтобы продемонстрировать идею:
- Клиент сначала отправляет "заголовок файла" (заполненный соответствующим образом), а затем содержимое файла.
- Сервер получает "заголовок файла" и, зная размер файла, получает содержимое файла.