asp.net FTP客户端设计与开发

4.1 软件总体分析与设计
根据需求分析,按照系统开发的基本观点对功能进行分解,从功能上可对模块作如下划分:
1.连接管理模块:主要完成主机与服务器之间的连接与关闭操作。
2.文件管理模块:主要完成文件的显示、新建文件、删除文件等。
3.文件传输模块:主要完成主机与服务器连接成功以后文件的上传与下载。
4.辅助功能模块:主要是保存一些登录信息和一些简单的配置信息。

4.3 模块的程序实现
4.3.1 连接管理的程序实现
在用户打开软件后进入主窗体(MFFTP.cs),在连接服务器输入框中输入IP地址、用户名及密码后。先发送IP地址和端口号到服务器,然后对其应答分析,如果应答码为220表示对新用户服务准备好,继续发送用户名返回应答码331表示用户名正确需要口令。最后发送密码直到返回应答码230表示用户登录成功。其主要代码程序如下:

		public void Connect(){socketControl = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);IPEndPoint ep = new IPEndPoint(IPAddress.Parse(RemoteHost), strRemotePort);// 链接try{socketControl.Connect(ep);}catch(Exception){throw new IOException("Couldn't connect to remote server");}// 获取应答码ReadReply();if(iReplyCode != 220){DisConnect();throw new IOException(strReply.Substring(4));}// 登录SendCommand("USER "+strRemoteUser);if( !(iReplyCode == 331 || iReplyCode == 230) ){CloseSocketConnect();//关闭连接throw new IOException(strReply.Substring(4));}if( iReplyCode != 230 ){SendCommand("PASS "+strRemotePass);if( !(iReplyCode == 230 || iReplyCode == 202) ){CloseSocketConnect();//关闭连接throw new IOException(strReply.Substring(4));}}bConnected = true;// 切换到目录ChDir(strRemotePath);}

4.3.2 文件管理的程序实现
对文件的管理有新建、删除、及属性设置。这里只对文件夹的删除操作做介绍,先实例化DirectoryInfo类并传入参数path,然后判断是文件还是文件夹用Delete()方法来删除文件。其主要代码程序如下:
private void MyDeleteFile(string path)
{//删除本地文件
try
{
if(path==null)
return;
DirectoryInfo MyDir=new DirectoryInfo(path);
if(MessageBox.Show(“是否删除文件夹:”+path+“及其所有内容?”,“提示信息”,MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)
{
MyDir.Delete(true);

			}else if(MessageBox.Show("是否删除文件:"+path+"及其所有内容?","提示信息",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes){FileInfo fi=new FileInfo(path);fi.Delete();}}catch{MessageBox.Show("该文件不存在","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);}}

4.3.3 文件传输的程序实现
先进行判断是否与主机连接成功,获取要下载的文件名、保存到本机的路径、保存到本机时的文件名。在进行设置传输模式:二进制Binary传输或ACSII传输,在创建数据连接发送PASV被动模式进行传输然后对应答命令进行判断。最后进行数据传输以流方式传输。其主要代码程序如下:

		public void Get(string strRemoteFileName,string strFolder,string strLocalFileName){if(!bConnected){Connect();}SetTransferType(TransferType.Binary);if (strLocalFileName.Equals("")){strLocalFileName = strRemoteFileName;}if(!File.Exists(strLocalFileName)){Stream st = File.Create(strLocalFileName);st.Close();}FileStream output = new FileStream(strFolder + "\\" + strLocalFileName,FileMode.Create);Socket socketData = CreateDataSocket();SendCommand("RETR " + strRemoteFileName);if(!(iReplyCode == 150 || iReplyCode == 125|| iReplyCode == 226 || iReplyCode == 250)){throw new IOException(strReply.Substring(4));}while(true){int iBytes = socketData.Receive(buffer, buffer.Length, 0);output.Write(buffer,0,iBytes);if(iBytes <= 0){break;}}output.Close();if (socketData.Connected){socketData.Close();}if(!(iReplyCode == 226 || iReplyCode == 250)){ReadReply();if(!(iReplyCode == 226 || iReplyCode == 250)){throw new IOException(strReply.Substring(4));}}}

4.3.4 辅助功能的程序实现
当需要返回上级目录时,先检查当前目录字符串是否小于3,如果小于了3则表示已经是跟目录了,不能在返回上级目录了。其他情况直接用Substring来去掉最后一个目录。具体办法是每次取字符串从0到最后一个“\”。然后把该字符串赋值给ComboBox。程序代码如下:其主要代码程序如下:

		private void but_Fa_Click(object sender, System.EventArgs e){//返回上级目录string path=this.comboBox1.Text;string newpath;if(path.EndsWith("\\")){if(path.Length<=3){MessageBox.Show("根目录了!","系统提示",MessageBoxButtons.OK,MessageBoxIcon.Information);return;}newpath=path.Substring(0,path.LastIndexOf("\\"));this.comboBox1.Text=newpath.Substring(0,newpath.LastIndexOf("\\"));}else{if(path.LastIndexOf("\\")!=2){newpath=path.Substring(0,path.LastIndexOf("\\"));this.comboBox1.Text=newpath;}else{newpath=path.Substring(0,path.LastIndexOf("\\")+1);this.comboBox1.Text=newpath;return;}}}

当在第一次登录主机时,为方便以后在次登录该主机则需要保存其登录信息。先把所有的输入框中的值赋给有代表意思的字符串。如果主机别名为空则主机别名与主机地址相同。
然后通过IniWriteValue方法来写入mfftp.ini文件中,其主要代码程序如下:

private void but_Ok_Click(object sender, System.EventArgs e){//添加登录主机信息string hostname=this.text_Name.Text.Trim();string hostip=this.text_SerIp.Text.Trim();string loginname=this.loginName.Text.Trim();string loginpwd=this.login_Pwd.Text.Trim();string mydir=this.text_add.Text.Trim();if(hostname==""){hostname=hostip;}IniFile inf=new IniFile();inf.path=".\\mfftp.ini";	int i=Convert.ToInt32(inf.IniReadValue("MFFTP_Options","HostNum"));//string serAdd=inf.IniReadValue("MFFTP_OptionsHost0","HostIp");string ServerName= "MFFTP_OptionsHost"+i;inf.IniWriteValue(ServerName,"HostName",hostname);inf.IniWriteValue(ServerName,"HostIp",hostip);inf.IniWriteValue(ServerName,"LoginName",loginname);inf.IniWriteValue(ServerName,"LoginPwd",loginpwd);inf.IniWriteValue(ServerName,"MyDir",mydir);i=i+1;inf.IniWriteValue("MFFTP_Options","HostNum",i.ToString());this.standm.sername(hostname);this.Close();}	
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;namespace MFFTP
{/// <summary>/// CreatNewName 的摘要说明。/// </summary>public class CreatNewName : System.Windows.Forms.Form{private System.Windows.Forms.TextBox text_newName;private System.Windows.Forms.Button but_Ok;private System.Windows.Forms.Button but_Cancel;/// <summary>/// 必需的设计器变量。/// </summary>private System.ComponentModel.Container components = null;private MFFTP mfftp;public CreatNewName(MFFTP FTP){//// Windows 窗体设计器支持所必需的//InitializeComponent();this.mfftp=FTP;//// TODO: 在 InitializeComponent 调用后添加任何构造函数代码//}/// <summary>/// 清理所有正在使用的资源。/// </summary>protected override void Dispose( bool disposing ){if( disposing ){if(components != null){components.Dispose();}}base.Dispose( disposing );}#region Windows 窗体设计器生成的代码/// <summary>/// 设计器支持所需的方法 - 不要使用代码编辑器修改/// 此方法的内容。/// </summary>private void InitializeComponent(){this.text_newName = new System.Windows.Forms.TextBox();this.but_Ok = new System.Windows.Forms.Button();this.but_Cancel = new System.Windows.Forms.Button();this.SuspendLayout();// // text_newName// this.text_newName.Location = new System.Drawing.Point(48, 40);this.text_newName.Name = "text_newName";this.text_newName.Size = new System.Drawing.Size(144, 21);this.text_newName.TabIndex = 0;this.text_newName.Text = "";// // but_Ok// this.but_Ok.Location = new System.Drawing.Point(56, 112);this.but_Ok.Name = "but_Ok";this.but_Ok.TabIndex = 1;this.but_Ok.Text = "修 改";this.but_Ok.Click += new System.EventHandler(this.but_Ok_Click);// // but_Cancel// this.but_Cancel.Location = new System.Drawing.Point(160, 112);this.but_Cancel.Name = "but_Cancel";this.but_Cancel.TabIndex = 2;this.but_Cancel.Text = "取 消";this.but_Cancel.Click += new System.EventHandler(this.but_Cancel_Click);// // CreatNewName// this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);this.ClientSize = new System.Drawing.Size(352, 174);this.ControlBox = false;this.Controls.Add(this.but_Cancel);this.Controls.Add(this.but_Ok);this.Controls.Add(this.text_newName);this.Name = "CreatNewName";this.Text = "重命名";this.ResumeLayout(false);}#endregionprivate void but_Cancel_Click(object sender, System.EventArgs e){this.Close();}private void but_Ok_Click(object sender, System.EventArgs e){string newFileName=this.text_newName.Text.Trim();this.mfftp.newFileName(newFileName);this.Close();}}
}

链接:https://pan.baidu.com/s/1Xwd0U_KktL0hRFPaggIOGQ?pwd=6688
提取码:6688

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/195143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

卖家低价侵权了怎么处理

店铺如果未经品牌允许&#xff0c;做了产品销售&#xff0c;其实从知识产权的角度出发&#xff0c;对于品牌来说&#xff0c;店铺这种行为属于侵权&#xff0c;侵犯了品牌的商标权、著作权、专利权等&#xff0c;所以品牌可以对店铺进行知识产权维权&#xff0c;店铺如果未授权…

性能测试常见面试题

1、简述性能测试流程&#xff1f; 1.分析性能需求。挑选用户使用最频繁的场景来测试&#xff0c;比如&#xff1a;登陆&#xff0c;搜索&#xff0c;下单等等。确定性能指标&#xff0c;比如&#xff1a;事务通过率为100%&#xff0c;TOP99%是5秒&#xff0c;最大并发用户为10…

崩坏:星穹铁道《渔工案周年特别篇》读后感,有多少恶搞柯南的地方

在星穹铁道1.5版本中&#xff0c;智库新上线一本读物&#xff0c;名为《渔工案周年特别篇》读后感。 《渔工案周年特别篇》读后感可以说是恶搞了大量柯南的梗和目前柯南的槽点了&#xff0c;看的有些搞笑。 《渔工案》在此前1.3版本里面&#xff0c;三月七的说出渔工案内容&…

GPT4-Turbo技术原理研发现状及未来应用潜力分析报告

今天分享的是GPT4-Turb系列深度研究报告&#xff1a;《GPT4-Turbo技术原理研发现状及未来应用潜力分析报告》。 &#xff08;报告出品方&#xff1a;深度行业分析研究&#xff09; 报告共计&#xff1a;46页 图像理解能力提升&#xff1a;三大视觉学习方法  为打造视觉大模…

成品短视频app源码开发,你需要知道的最新动向

随着移动互联网的快速发展&#xff0c;短视频行业正迅速崛起。越来越多的创业者和开发者将目光投向了成品短视频app源码开发领域。下面我们将深入探讨这一领域的最新动向&#xff0c;带您了解成品短视频app源码开发的趋势与前景 成品短视频app源码开发的前景和机遇 短视频内容…

深圳招聘一般在哪个网站

深圳吉鹿力招聘网是一个专注于深圳招聘的平台&#xff0c;主要提供人才招聘服务。在深圳吉鹿力招聘网上&#xff0c;你可以找到各种深圳招聘信息&#xff0c;包括企业招聘、职位发布、简历投递等。深圳吉鹿力招聘网的出现&#xff0c;方便了求职者的投递和查询工作机会&#xf…

36、红外遥控(外部中断)

红外遥控简介 红外遥控是利用红外光进行通信的设备&#xff0c;由红外LED将调制后的信号发出&#xff0c;由专用的红外接收头进行解调输出 通信方式&#xff1a;单工&#xff0c;异步 红外LED波长&#xff1a;940nm 通信协议标准&#xff1a;NEC标准 硬件电路 基本发送与接收…

基于Spring Cloud智慧工地可视化管理平台源码

智慧工地是聚焦工程施工现场&#xff0c;紧紧围绕人、机、料、法、环等关键要素&#xff0c;综合运用物联网、云计算、大数据、移动计算和智能设备等软硬件信息技术&#xff0c;与施工生产过程相融合。 一、什么是智慧工地 智慧工地是指利用移动互联、物联网、智能算法、地理…

OpenAI发生的大事件总结!

在 11 月的最后一天&#xff0c;OpenAI 官网发布了一则公告&#xff0c;宣布 Sam Altman 再次担任首席执行官&#xff0c;并成立了新的初始董事会。这项持续了 12 天的事件终于得到了解决&#xff0c;OpenAI 回到了正常运营轨道上。 一切仍然保持不变&#xff1a; Sam Altman仍…

JHipster Lite:快速生成六边形架构的开发工具

是一个用于快速生成、开发和部署现代 Web 应用程序和微服务架构的开发平台。 JHipster Lite将帮助您开始您的项目&#xff0c;逐步生成您需要的内容。 生成的代码使用六角形架构技术代码与您的业务代码分开您只会生成您想要的代码&#xff0c;不会额外生成未使用的代码尽可能…

程序员怎么找对象

程序员找对象可以参考以下建议&#xff1a; 扩大社交圈。参加公司或社区组织的各种活动&#xff0c;如团建、讲座、兴趣小组等&#xff0c;这些场合更容易遇到与自己有共同兴趣的人。利用社交媒体。利用社交媒体扩大自己的曝光范围&#xff0c;积极展示自己的兴趣爱好和能力&a…

webapi接口调用是否影响erp性能

在使用ERP系统时&#xff0c;很多用户都会担心WebAPI会导致ERP变慢的问题&#xff0c;毕竟ERP是企业中非常重要的系统之一&#xff0c;不稳定或者变慢都会对企业运营带来重大影响。那么&#xff0c;WebAPI真的会导致ERP变慢吗&#xff1f; 一、什么是WebAPI WebAPI是现代应用…

基于PHP的在线日语学习平台

有需要请加文章底部Q哦 可远程调试 PHP在线日语学习平台 一 介绍 此日语学习平台基于原生PHP开发&#xff0c;数据库mysql。系统角色分为用户和管理员。(附带参考设计文档) 技术栈&#xff1a;phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/注销 2 个人中心 3 查看课程…

shared_ptr 模拟实现

智能指针原理 智能指针基本上就是利用 RAII 技术实现的。资源取得时机便是初始化时机&#xff08;Resource Acquisition Is Initialization&#xff09;是一种利用对象生命周期来控制程序资源的技术。在对象构造时获取资源&#xff0c;接着控制对资源的访问&#xff0c;使之在…

智能优化算法应用:基于热交换算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于热交换算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于热交换算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.热交换算法4.实验参数设定5.算法结果6.参考文献7.…

Bishop新著 - 深度学习:基础与概念 - 前言

译者的话 十几年前&#xff0c;笔者在MSRA实习的时候&#xff0c;就接触到了Christopher M, Bishop的经典巨著《Pattern Recogition and Machine Learning》(一般大家简称为PRML)。Bishop大神是微软剑桥研究院实验室主任&#xff0c;物理出身&#xff0c;对机器学习的基本概念…

客户销售目标拆解:数据驱动的方法和策略

写在开头 在当今竞争激烈的商业环境中,企业需要更加精准地制定销售目标以实现业务增长。数据驱动的方法在这一过程中扮演着关键的角色,帮助企业深入了解客户特征、行为和需求。本篇博客将深入探讨销售目标拆解在企业管理中的重要性,并介绍如何利用数据驱动的方法和策略来制…

Leetcode 2954. Count the Number of Infection Sequences

Leetcode 2954. Count the Number of Infection Sequences 1. 解题思路2. 代码实现 题目链接&#xff1a;2954. Count the Number of Infection Sequences 1. 解题思路 这道题其实思路上还是挺简单的&#xff0c;就是一个数学问题&#xff0c;还是那种不太难的数学问题。 显…

免费数据采集软件,多种数据采集方式

数据无疑是企业决策的关键驱动力。要充分利用数据&#xff0c;就需要进行数据收集&#xff0c;而数据采集的方式多种多样。 数据采集方式的丰富多彩 数据采集并非一蹴而就的简单任务&#xff0c;而是一个多层次、多步骤的过程。在这个过程中&#xff0c;我们有着多种数据采集…

VS2022配置WinPcap开发

winpcap 官网&#xff1a;http://www.winpcap.org/ 1.首先下载安装 winpcap.exe&#xff0c;http://www.winpcap.org/install/default.htm 目的是安装相关驱动和 dll&#xff0c;安装完成之后基于 winpcap 的应用程序才能够正常运行。 2.下载 winpcap 的开发包&#xff0c;头文…