0

私はこれに2日間取り組んでいますが、理解できません。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();
    }
4

1 に答える 1

1

NetworkStreamファイルの概念はなく、バイトバッファをストリーミングするためのクラスにすぎません。あなたがしなければならないことは、ファイル名をクライアントに送信するための何らかの形式のプロトコルを考え出すことです。

これを行うには、最初にファイル名とファイル名の長さを送信し、次にファイルサイズを送信してから、実際のファイルの内容を送信します。

クライアント側は、ファイル名の長さを読み取り、ファイル名を読み取り、ファイルサイズを読み取り、ファイルデータを読み取ることができます。

于 2013-02-21T22:42:32.833 に答える