📄 form1.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 + -