передать файл с клиента на сервер - PullRequest
0 голосов
/ 01 апреля 2020

Я получил этот код, который работает при передаче файла с сервера на клиента .

Как мне заставить его работать с клиента до сервер .

Это отдельное приложение чата LAN Messenger, с которым я играю.

  • чат
  • передача файлов
  • NAudio Голосовой чат

сервер

   //ftp Server
    public void beginftpserver()
    {   //start ftp server
        ftp_listener.Start();
        ftpClient = ftp_listener.AcceptTcpClient();

        NetworkWriter = new StreamWriter(ftpClient.GetStream(), Encoding.UTF8);
        NetworkStreamReader = new StreamReader(ftpClient.GetStream(), Encoding.UTF8);
        while (true)
        {
            if (ftpClient.Connected)
            {

                string data = string.Empty;

                while (!NetworkStreamReader.EndOfStream)
                {
                    data = NetworkStreamReader.ReadLine();
                    filename = data.Split('\\')[0];
                    data = data.Split('*')[1];
                    File.WriteAllBytes(filename, Convert.FromBase64String(data));

                    this.textBox1.Invoke(new MethodInvoker(delegate ()
                    {
                        string download = "file has been downloaded ... " + filename;
                        textBox1.AppendText(download + Environment.NewLine);
                    }));
                }
                NetworkStreamReader.Close();
                ftpClient.Close();
            }
        }
    }

    private void bt_ftp_Click(object sender, EventArgs e)
    {
        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            _filePath = openFileDialog1.FileName;
            label1.Text = openFileDialog1.SafeFileName + $" \\ {openFileDialog1.SafeFileName.Split('.')[1]}";


              NetworkWriter = new StreamWriter(ftpClient.GetStream(), Encoding.UTF8);

            byte[] filebuffer = File.ReadAllBytes(_filePath);

            //converts the specified string, which encodes binary data as base-64 digits, to an equivalent 8-bit unsigned integer array.
            string base64encodestr = Convert.ToBase64String(filebuffer);

            _fileContent = base64encodestr;

            NetworkWriter.Write($"{openFileDialog1.SafeFileName}\\* {_fileContent}");

            //Text = "File successfully sended.";
            this.textBox1.Invoke(new MethodInvoker(delegate ()
            {
                textBox1.AppendText("File successfully sended ... " + Environment.NewLine);
            }));
            NetworkWriter.Close();

        }
    }

клиент

  //ftp
   public void beginftpClient()
    {
        ftpclient = new TcpClient();
            ftpclient.Connect("192.168.1.160", 87);

    }

    private void RecieveFile ()
    {
        string data = string.Empty;
        StreamReader NetworkStreamReader = new StreamReader(ftpclient.GetStream(), Encoding.UTF8);

        while (!NetworkStreamReader.EndOfStream)
        {
            data = NetworkStreamReader.ReadLine();
            filename = data.Split('\\')[0];
            data = data.Split('*')[1];
            File.WriteAllBytes(filename, Convert.FromBase64String(data));
        }

        this.textBox1.Invoke(new MethodInvoker(delegate ()
        {
            string download = "file has been downloaded ... " + filename;
            textBox1.AppendText(download + Environment.NewLine);
        }));

        NetworkStreamReader.Close();

    }


    //
    private void bt_ftp_Click(object sender, EventArgs e)
    {
        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {

            _filePath = openFileDialog1.FileName;
            label1.Text = openFileDialog1.SafeFileName + $" \\ {openFileDialog1.SafeFileName.Split('.')[1]}";



NetworkWriter = new StreamWriter(ftpclient.GetStream(), Encoding.UTF8);

                byte[] filebuffer = File.ReadAllBytes(_filePath);

                //converts the specified string, which encodes binary data as base-64 digits, to an equivalent 8-bit unsigned integer array.
                string base64encodestr = Convert.ToBase64String(filebuffer);

                _fileContent = base64encodestr;

                NetworkWriter.Write($"{openFileDialog1.SafeFileName}\\* {_fileContent}");

                //Text = "File successfully sended.";
                this.textBox1.Invoke(new MethodInvoker(delegate ()
                {
                    textBox1.AppendText("File successfully sended ... " + Environment.NewLine);
                }));

                NetworkWriter.Close();
            }
        }
...