我正在尝试发送* .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);
}
}
}
现在,问题是,如何获得与客户端相同的文件名?没有将其重命名为“结果”?有没有可能用文件发送该名称并在服务器端使用它?
答案 0 :(得分:0)
可以引入“文件头”来解决问题。 “文件头”数据结构应包含所需信息(至少是文件大小,例如文件名)。让我们考虑以下流程来演示这个想法: