目前,我在利用FtpServer和FtpClient实现文件上传与下载,可只能实现下载,而且只能下载一个文件,下载第二个文件就出错了呀。。不知为什么,请高手们多多指点。
FtpServer关键代码:
private void BeginBtn_click(object sender, System.EventArgs e)
{
try
{
//端口号
port = Int32.Parse(textBox1.Text);
}
catch{MessageBox.Show("Please enter a number!");}
try
{
//建立侦听
listener = new TcpListener(port);
listener.Start();
Thread thread = new Thread(new ThreadStart(receive));
thread.Start();
}
catch(Exception ee){MessageBox.Show(ee.Message);}
}
public void receive()
{
try
{
socket = listener.AcceptSocket();
}
catch{return;} //如果连接通过 则开始发送相关信息 并接收来自客户端的信息
if (socket.Connected)
{
string str = textBox2.Text;
byte[] bytee = System.Text.Encoding.BigEndianUnicode.GetBytes(str.ToCharArray());
socket.Send(bytee,bytee.Length,0); NetworkStream stream = new NetworkStream(socket);
byte[] by = new byte[1024];
int i = socket.Receive(by,by.Length,0);
string s = System.Text.Encoding.BigEndianUnicode.GetString(by);
textBox3.AppendText(s); if( s.CompareTo("***The client has been closed!***") == 1 )
{
filestream=new FileStream(s.Substring(0,s.IndexOf("\r\n")),FileMode.Open,FileAccess.Read);

byte[] buffer = new byte[1024];

filestream.Seek(0,SeekOrigin.Begin);
while((number=filestream.Read(buffer,0,1024))!=0)
{
stream.Write(buffer,0,number);
stream.Flush();
Console.WriteLine(filestream.Position);
}
filestream.Flush();
// filestream.Close();
}

}
}
FtpClient关键代码:
private void ConnectBtn_click(object sender, System.EventArgs e)
{
int port=0;
IPAddress serverIP=IPAddress.Parse("127.0.0.1"); try
{
serverIP=IPAddress.Parse(textBox1.Text);

}
catch{MessageBox.Show("The IP is not correct!");} client=new TcpClient(); try
{
port=Int32.Parse(textBox2.Text); }
catch{MessageBox.Show("Please enter a number!");} try
{
//连接服务器端IP地址和端口
client.Connect(serverIP,port);
//读取流
netStream = client.GetStream();
byte[] bb = new byte[6400];
i = netStream.Read(bb,0,6400);
string s = System.Text.Encoding.BigEndianUnicode.GetString(bb);
textBox3.AppendText(s);
int j = textBox3.Lines.Length;
//将流中的内容按条加入comboBox1中
for(int k=0;k<j-1;k++)
{
comboBox1.Items.Add(textBox3.Lines[k]);
}
comboBox1.Text = comboBox1.Items[0].ToString();
}
catch
{MessageBox.Show(this,"对不起,连接不上服务器!!","warning");}
} private void DownloadBtn_click(object sender, System.EventArgs e)
{
inputString = comboBox1.Text;
string[] splitResults;
string s = null;
//以.作为分隔符 找到最后一个.后面的数据 则为文件名的后坠
//作为saveFileDialog1的Filter
splitResults = Regex.Split(inputString,"\\.");
StringBuilder resultsString = new StringBuilder(32); foreach(string stringElement in splitResults)
{
resultsString.Append(stringElement + "\n");
s =stringElement;
}
saveFileDialog1.FileName=comboBox1.Text;
saveFileDialog1.Filter = "(*."+s+")|*."+s;
if(saveFileDialog1.ShowDialog()==DialogResult.OK)
{
try
{

filestream = new FileStream(saveFileDialog1.FileName,FileMode.OpenOrCreate,FileAccess.Write);
netStream = client.GetStream();
string down = comboBox1.Text+"\r\n";
byte[] by = System.Text.Encoding.BigEndianUnicode.GetBytes(down.ToCharArray());
netStream.Write(by,0,by.Length);
netStream.Flush();
Thread thread = new Thread(new ThreadStart(download));
thread.Start();

}
catch
{
MessageBox.Show(this,"出错了呀,不能下载文件!!!","Warning");
}
}
} private void download()
{
try
{

//建立一个流
Stream stream=null;
//从服务器端读取信息
stream=client.GetStream();
int length=1024;
byte[] bye=new byte[1024];
int size = stream.Read(bye,0,length);
//把流的信息写入新文件中
while(size > 0)
{
filestream.Write(bye,0,size);
filestream.Flush();
if (size<1024)
break;
size = stream.Read(bye,0,length);

stream.Flush();

stream.Close();
MessageBox.Show("文件成功下载!");
}
catch
{
MessageBox.Show("download() is Error!!!");
} }