我已经为此工作了两天,我无法弄明白。 我想通过TCP传输文件(服务器发送,客户端接收)。
我面临的问题是我想为接收方实现一种方法,以便知道文件名是什么文件名。 到目前为止我的工作代码
public void SendFile(string path, string IP)
{
TcpClient client = new TcpClient();
client.Connect(IP, 1095);
using (NetworkStream networkStream = client.GetStream())
using (FileStream fileStream = File.OpenRead(path))
{
ASCIIEncoding asci = new ASCIIEncoding();
byte[] b = asci.GetBytes(path);
networkStream.Write(b, 0, b.Length);
networkStream.Flush();
fileStream.CopyTo(networkStream);
}
client.Close();
}
private void ListenForFile()
{
TcpListener listener = new TcpListener(IPAddress.Any, 1095);
listener.Start();
using (TcpClient incoming = listener.AcceptTcpClient())
using (NetworkStream networkStream = incoming.GetStream())
using (FileStream fileStream = File.OpenWrite(@pathName + @"\something.extension"))
{
networkStream.CopyTo(fileStream);
}
listener.Stop();
}
答案 0 :(得分:0)
NetworkStream
没有文件概念,它只是一个流式字节缓冲区的类。您需要做的是提出某种形式的协议来将文件名发送给客户端。
你可以先传输文件名和文件名的长度,然后再传输文件大小,然后传输实际的文件内容。
客户端可以读取文件名长度,读入文件名,读入文件大小,然后读入文件数据。