⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 FTP服务器
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;
namespace FTP_Server
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
        }
        TcpListener myListener;
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                this.listBox1.Items.Add("开始监听");
                myListener = new TcpListener(IPAddress.Parse("192.168.1.100"), 21);
                myListener.Start();
                Thread myThread = new Thread(new ThreadStart(ReceiveData));
                myThread.Start();
            }
            catch (Exception err)
            {
                MessageBox.Show(err.ToString());
                myListener.Stop();
            }

        }
        private void ReceiveData()
        {
            TcpClient newClient;
            while (true)
            {
                try
                {
                    newClient = myListener.AcceptTcpClient();
                }
                catch (Exception err)
                {
                    MessageBox.Show(err.ToString());
                    myListener.Stop();
                    break;
                }
                Receive tp = new Receive(newClient, ref listBox1, ref textBox1);
                Thread thread = new Thread(new ThreadStart(tp.processService));
                thread.Start();
            }
        }
        public class Receive
        {
            private TcpClient client;
            private ListBox listbox;
            private TextBox textbox;
            public Receive(TcpClient tcpclient,ref ListBox listbox,ref TextBox textbox)
            {
                client = tcpclient;
                this.listbox = listbox;
                this.textbox = textbox;
            }
            public void processService()
            {
                NetworkStream netStream = client.GetStream();
                StreamReader sr = new StreamReader(netStream, System.Text.Encoding.Unicode);
                StreamWriter sw = new StreamWriter(netStream, System.Text.Encoding.Unicode);
                sw.WriteLine("220");
                sw.Flush();
                listbox.Items.Add("有用户连接,发送220");
                while (true)
                {
                    string str = "";
                    try
                    {
                        str = sr.ReadLine();
                    }
                    catch 
                    {
                        listbox.Items.Add("用户意外断开连接");
                        break;
                    }
                    if (str==null)
                    {
                        listbox.Items.Add("用户意外断开连接");
                        break;
                    } 
                    else
                    {
                        listbox.Items.Add("收到:" + str);
                    }
                    string command = "";
                    string parameter = "";
                    int index = str.IndexOf(" ");
                    if (index>-1)
                    {
                        command = str.Substring(0,index);
                        parameter = str.Substring(index + 1);
                        parameter = parameter.Replace("server:", textbox.Text);
                    } 
                    else
                    {
                        command = str;
                    }
                    FileStream fs = null;
                    FileStream fsu = null;
                    switch (command)
                    {
                    case "LIST":
                        string[] dir = Directory.GetDirectories(parameter);
                        string sendstr = "";
                        for (int i = 0; i < dir.Length;i++ )
                        {
                            dir[i] = dir[i].Replace(textbox.Text, "server:");
                            sendstr += dir[i] + "@";
                        }
                            if (sendstr.Length>0)
                            {
                                sendstr = sendstr.Substring(0, sendstr.Length - 1);
                            }
                            sw.WriteLine("125");
                            sw.Flush();
                            listbox.Items.Add("发送:125");
                            sw.WriteLine(sendstr);
                            sw.Flush();
                            listbox.Items.Add("发送目录名:" + sendstr);
                            string[] files = Directory.GetFiles(parameter);
                            sendstr = "";
                            for (int i = 0; i < files.Length;i++ )
                            {
                                files[i] = files[i].Replace(textbox.Text, "server:");
                                sendstr += files[i] + "@";
                            }
                            if (sendstr.Length>0)
                            {
                                sendstr = sendstr.Substring(0, sendstr.Length - 1);
                            }
                            sw.WriteLine(sendstr);
                            sw.Flush();
                            listbox.Items.Add("发送文件名:" + sendstr);
                    	break;
                        case "RETR":
                            try
                            {
                                fs = new FileStream(parameter, FileMode.Open, FileAccess.Read);
                            }
                            catch 
                            {
                                fs.Close();
                                break;
                            }
                            sw.WriteLine("150");
                            sw.Flush();
                            listbox.Items.Add("发送:150");
                            sw.WriteLine(fs.Length.ToString());
                            sw.Flush();
                            listbox.Items.Add("发送:" + fs.Length.ToString() + "字节");
                            for (int i = 0; i < fs.Length;i++ )
                            {
                                netStream.WriteByte((byte)fs.ReadByte());
                                netStream.Flush();
                            }
                            fs.Close();
                            break;
                        case "LOAD":
                            sw.WriteLine("250");
                            sw.Flush();
                            listbox.Items.Add("发送:250");
                            int len=parameter.LastIndexOf("\\");
                            string path = parameter.Substring(len, parameter.Length-len);
                            string filename=parameter;
                            path="D:\\server\\"+path;
                            string str1=sr.ReadLine();
                            int length = Convert.ToInt32(str1);
                            try
                            {
                                fsu = new FileStream(path, FileMode.Create, FileAccess.Write);
                                for (int i = 0; i < length; i++)
                                {
                                    fsu.WriteByte((byte)netStream.ReadByte());
                                    fsu.Flush();
                                }
                            }catch(Exception err) 
                            {
                                MessageBox.Show(err.ToString());
                            }
                            
                            listbox.Items.Add("已将文件"+parameter+"保存到"+path);
                            MessageBox.Show("已将文件" + parameter + "保存到" + path);
                            fsu.Close();
                            break;
                        case"QUIT":
                            client.Close();
                            listbox.Items.Add("关闭与该用户的连接");
                            return;
                    }

                }
                client.Close();
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                myListener.Stop();
            }
            catch(Exception err)
            {
                MessageBox.Show(err.ToString());
            }
        }
       
        
    }
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -