C# 接收端的NetworkStream文件名

C# 接收端的NetworkStream文件名,c#,sockets,file-transfer,lan,C#,Sockets,File Transfer,Lan,这件事我已经做了两天了,我想不出来。 我想通过TCP(服务器发送,客户端接收)传输文件 我面临的问题是,我想实现一种方法,让接收方知道它正在获取的文件的文件名。 到目前为止,我一直在使用代码 public void SendFile(string path, string IP) { TcpClient client = new TcpClient(); client.Connect(IP, 1095); using (Netwo

这件事我已经做了两天了,我想不出来。 我想通过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();
    }

NetworkStream
没有文件的概念,它只是一个用于流式字节缓冲区的类。您需要做的是想出某种形式的协议将文件名发送到客户端

您可以通过传输文件名的长度和文件名,然后是文件大小,然后传输实际的文件内容来完成此操作


客户端可以读入文件名长度,读入文件名,读入文件大小,然后读入文件数据。

因此,基本上在流之前发送一条消息,只包含文件名?是的。您应该首先包括文件名的长度,否则您将不知道文件名在哪里停止,实际文件从哪里开始,我也会传输数据大小,以便更好地测量。感谢您的快速响应!我编辑了我的代码,首先发送一条带有文件名的tcp消息。