ImageVerifierCode 换一换
格式:DOC , 页数:24 ,大小:1.07MB ,
资源ID:6176886      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/6176886.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(数据通信与计算机网络课程设计要求.doc)为本站上传会员【pc****0】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

数据通信与计算机网络课程设计要求.doc

1、 第一部分 数据通信与计算机网络课程设计(要求) 一、课程设计的性质、目的和任务 性质:独立设课 目的和任务: 1、掌握数据通信和计算机网络的基本原理 2、掌握数据通信和计算机网络设计、分析和实现方法 3、提高学生编制网络通信程序、网络应用服务程序的能力 二、课程设计的基本内容和要求 基本内容:网络数据通信的基本方法及实现。 基本要求:根据选定的项目,课题小组成员认真查阅相关资料,发挥学生的主体作用,提出设计方案,老师参与,进行讨论和分析,最终确定设计方案。在此基础上,合理分工,协同完成项目的设计与实现,最后完成课程设计的报告撰写。 三、课程设计的内容学时安排 序号

2、 实验项目 学时分配 实验类型 每组人数 内容提要 1 ARP协议数据包的捕获解析设计与实现 1周 设计性 3-6人 通过本实验,掌握网络协议数据包捕获和解析编程的技术 2 基于Socket的在线数据传输设计与实现 1周 设计性 3-6人 基于Socket套接口,实现通信双方的在线键盘数据传输服务。目的使学生掌握网络在线数据交换的设计方法。 3 基于Socket的文件传输服务(FTP)设计与实现 1周 设计性 3-6人 基于Socket套接口,实现文件数据传输服务。目的使学生掌握文件传输服务的设计方法。 4 基于Socke

3、t的HTTP文件传输服务设计与实现 1周 设计性 3-6人 基于Socket套接口,实现HTTP文件数据传输服务。目的使学生掌握Web网络服务的设计方法。 5 基于Socket的Telnet服务设计与实现 1周 设计性 3-6人 基于Socket套接口,实现Telnet服务。目的使学生掌握远程登录网络访问服务的设计方法。 6 滑动窗口协议的模拟 1周 设计性 3-6人 通过实现对于滑动窗口协议的模拟,加深对滑动窗口协议的理解。 7 简单的端口扫描 1周 设计性 3-6人 实现一个扫描器,必须能够完成以下所有功能:使用TCP conne

4、ct、TCP SYN和 TCP FIN 进行端口扫描,使用ICMP echo扫描实现IP扫描。并把扫描得知的结果记录下来。 注:一、滑动窗口协议的模拟 1 关于滑动窗口,请阅读网络教材(实现— 选择性重发); 2 运行时启动两个线程client 和server。其中sever 初始应该为监听状态; 3 可指定滑动窗口数目m(m=2n,n为大于1的整数)和要发送的帧总数,停等的超时时间间隔以及发送类型(正常发送,即没有缺帧和错序发送帧的现象),发送速率等参数; 4 client向server发起连接,成功则转入5; 5 client端发出帧,帧的内容可同序号或者为“111”

5、222”…“aaa”“bbb”…或者是一段文章中的部分内容; 6 选择发送类型为“缺帧”,模拟因网络拥塞造成丢帧的情况,开始发送情况同“正常发送”的情况。不同的是在帧x发送前用户可以选择丢失,则客户端继续接收帧x+1,x+2…并且对帧x+1,x+2…发出确认并缓存该帧; 7 服务器端等待一段相当长的时间(超时),重发帧x; 8 选择发送类型为“错序发送”。将一组待发送的帧按照指定(错序)顺序发送。具体实现同“缺帧”情况; 9 以上各种情况下,client和server窗口中应实时显示帧的发送和接受情况,包括序号,到达时间,内容等。以及窗口的填充和清空情况; 10 使用socket编

6、程; 11 本实验要求实现的是一个简化了许多的滑动窗口协议。对于所有包,在生成序列号后进行发送。接收方为每个包设定一个定时器,记录包的到达情况。如发送方发送速度过快,或某包定时器超时,则发送方应重发。接受方窗口满时,接受到的包应被拷贝至硬盘(以下部分可以自由设计,仅做参考)。 12 主要的数据结构: 包: class packet{ protect: int num;//数据包的序号 cstring content;//数据包内容 … … //method … … } 消息: class message{ protect: int no;//消息的序号 cstr

7、ing content;//消息内容 int id;//消息的方向 //method … … } create_windows() create—packets() Create—timer() Receive() Waitfornext() Write() 超时 包全部进入 Resend() 13 程序主要流程 14 方法: void create_windows();//模拟滑动窗口协议中发送,接受窗口 void create_packet();//模拟滑动窗口协议中包 bool create_

8、timer();//模拟滑动窗口协议中的定时器 int waitfornext();//等待下一个包 void resend();//重发 void receive();//数据包到达,接受数据包 void write();//数据包全部到达,写入硬盘 注:本实验主要目的是为了加深同学们对于滑动窗口协议的了解,而不是底层的网络编程。所以在这里,“包”的概念可以是一组题为“1”、“2”、“3”等等的文件(由程序动态创建)。如果是在两台机器上实现,其中一台机器作为发送方,另一台则是接收方,双方进行通讯。如果接收方窗口大小为6,则当编号为7的包(文件)到达时,接受方应作相应处理,包括通

9、知发送方暂停发送,缓存收到的包,清空滑动窗口等。当然,对于出错的情况,比如包丢失,不按序到达等情况编程者应有所考虑,所以在模拟接收方的机器上,应提供选择待发送包序号的界面。一个简单的选择发送包的界面如下: 15按序发送 16 错序发送(包4未发送) 二、简单的端口扫描 1、基本概念 l 三次握手Three-way Handshake    一个虚拟连接的建立是通过三次握手来实现的    1. (B) --> [SYN] --> (A)     假如服务器A和客户机B通讯. 当A要和B通信时,B首先向A发一个SYN (Syn

10、chronize) 标记的包,告诉A请求建立连接.    注意: 一个 SYN包就是仅SYN标记设为1的TCP包(参见TCP包头Resources). 认识到这点很重要,只有当A收到B发来的SYN包,才可建立连接,除此之外别无他法。因此,如果你的防火墙丢弃所有的发往外网接口的SYN包,那么你将不能让外部任何主机主动建立连接。 2. (B) <-- [SYN/ACK] <--(A)    接着,A收到后会发一个对SYN包的确认包(SYN/ACK)回去,表示对第一个SYN包的确认,并继续握手操作。  注意: SYN/ACK包是仅SYN 和 ACK 标记为1的包. 3. (B) --> [

11、ACK] --> (A)  B收到SYN/ACK ,B发一个确认包(ACK),通知A连接已建立。至此,三次握手完成,一个TCP连接完成  。   Note: ACK包就是仅ACK 标记设为1的TCP包。 需要注意的是当三次握手完成、连接建立以后,TCP连接的每个包都会设置ACK位。   这就是为何连接跟踪很重要的原因了. 没有连接跟踪,防火墙将无法判断收到的ACK包是否属于一个已经建立的连接。一般的包过滤(Ipchains)收到ACK包时,会让它通过;而当状态型防火墙收到此种包时,它会先在连接表中查找是否属于哪个已建连接,否则丢弃该包 。 l 四次握手Four-way Han

12、dshake    四次握手用来关闭已建立的TCP连接    1. (B) --> ACK/FIN --> (A)    2. (B) <-- ACK <-- (A)    3. (B) <-- ACK/FIN <-- (A)    4. (B) --> ACK --> (A)     注意: 由于TCP连接是双向连接, 因此关闭连接需要在两个方向上做。ACK/FIN 包(ACK 和FIN 标记设为1)通常被认为是FIN(终结)包。然而,由于连接还没有关闭, FIN包总是打上ACK标记。 没有ACK标记而仅有FIN标记的包不是合法的包,并且通常被认为是恶意的。 最常见的非法组合

13、是SYN/FIN 包。 注意:由于 SYN包是用来初始化连接的。 它不可能和 FIN和RST标记一起出现,这也是一个恶意攻击。 表 3-2 TCP 状态表   状 态  描 述 CLOSED   关闭状态,没有连接活动或正在进行   LISTEN   监听状态,服务器正在等待连接进入   SYN RCVD   收到一个连接请求,尚未确认 SYN SENT  已经发出连接请求,等待确认  ESTABLISHED 连接建立,正常数据传输状态  FIN WAIT 1   (主动关闭)已经发送关闭请求,等待确认  FIN WAIT 2   (主动关闭)收到对方关

14、闭确认,等待对方关闭请求  TIMED WAIT  完成双向关闭,等待所有分组死掉  CLOSING   双方同时尝试关闭,等待对方确认 CLOSE WAIT (被动关闭)收到对方关闭请求,已经确认   LAST ACK   (被动关闭)等待最后一个关闭确认,并等待所有分组死掉   l 正常状态转换  1 服务器端首先执行 LISTEN 原语进入被动打开状态( LISTEN ),等待客户端连接;   ·2当客户端的一个应用程序发出 CONNECT 命令后,本地的 TCP 实体为其创建一个连接记录并标记为 SYN SENT 状态,然后给服务器发送一个 SYN 报文段;  

15、·  3 服务器收到一个 SYN 报文段,其 TCP 实体给客户端发送确认 ACK 报文段同时发送一个 SYN 信号,进入 SYN RCVD 状态;   ·4客户端收到 SYN + ACK 报文段,其 TCP 实体给服务器端发送出三次握手的最后一个 ACK 报文段,并转换为 ESTABLISHED 状态;   · 5 服务器端收到确认的 ACK 报文段,完成了三次握手,于是也进入 ESTABLISHED 状态。   在此状态下,双方可以自由传输数据。当一个应用程序完成数据传输任务后,它需要关闭 TCP 连接。假设仍由客户端发起主动关闭连接。   6 客户端执行 CLOSE 原语,

16、本地的 TCP 实体发送一个 FIN 报文段并等待响应的确认(进入状态 FIN WAIT 1 );   ·7 服务器收到一个 FIN 报文段,它确认客户端的请求发回一个 ACK 报文段,进入 CLOSE WAIT 状态;   · 8 客户端收到确认 ACK 报文段,就转移到 FIN WAIT 2 状态,此时连接在一个方向上就断开了;   · 9 服务器端应用得到通告后,也执行 CLOSE 原语关闭另一个方向的连接,其本地 TCP 实体向客户端发送一个 FIN 报文段,并进入 LAST ACK 状态,等待最后一个 ACK 确认报文段;   · 10 客户端收到 FIN 报文段并确认,进入

17、 TIMED WAIT 状态,此时双方连接均已经断开,但 TCP 要等待一个 2 倍报文段最大生存时间 MSL ( Maximum Segment Lifetime ),确保该连接的所有分组全部消失,以防止出现确认丢失的情况。当定时器超时后, TCP 删除该连接记录,返回到初始状态( CLOSED )。  ·  11 服务器收到最后一个确认 ACK 报文段,其 TCP 实体便释放该连接,并删除连接记录,返回到初始状态( CLOSED )。 2、几种扫描的原理 l TCP connect() 扫描: 这是最基本的TCP扫描。操作系统提供的connect()系统调用,用来与每一个感兴趣

18、的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功。否则,这个端口是不能用的,即没有提供服务。这个技术的一个最大的优点是,你不需要任何权限。系统中的任何用户都有权利使用这个调用。另一个好处就是速度。如果对每个目标端口以线性的方式,使用单独的connect()调用,那么将会花费相当长的时间,你可以通过同时打开多个套接字,从而加速扫描。使用非阻塞I/O允许你设置一个低的时间用尽周期,同时观察多个套接字。 l TCP SYN扫描 : 这种技术通常认为是“半开放”扫描,这是因为扫描程序不必要打开一个完全的TCP连接。扫描程序发送的是一个SYN数据包,好像准备打开一个实

19、际的连接并等待反应一样(参考TCP的三次握手建立一个TCP连接的过程)。一个SYN/ACK的返回信息表示端口处于侦听状态。一个RST返回,表示端口没有处于侦听态。如果收到一个SYN/ACK,则扫描程序必须再发送一个RST信号,来关闭这个连接过程。 l TCP FIN 扫描 : 有的时候有可能SYN扫描都不够秘密。一些防火墙和包过滤器会对一些指定的端口进行监视,有的程序能检测到这些扫描。相反,FIN数据包可能会没有任何麻烦的通过。这种扫描方法的思想是关闭的端口会用适当的RST来回复FIN数据包。另一方面,打开的端口会忽略对FIN数据包的回复。这种方法和系统的实现有一定的关系。有的系统不管端口

20、是否打开,都回复RST,这样,这种扫描方法就不适用了。这种方法在区分Unix和NT时,是十分有用的。 l ICMP Echo扫描: 使用ICMP Request数据包来判断在一个网络上主机是否开机。如果主机开机,则会回复ICMP Echo数据包。否则得不到回复。 注释:从上述所列的课程设计内容中,选择一个必做。若有能力或业余时间的学生,可选择一个以上的设计内容做。 四、课程设计报告要求 写出课程设计目的,设计内容,实验环境,设计思想和实现流程,源程序、运行结果以及分析。 第二部分 涉及到的概念 1、Socket for C:

21、 2、Socket for java: 第三部分 实例 1、ftp客户端程序 代码如下: package ftpclient; import java.awt.*; import java.awt.event.*; import javax.swing.*;

22、import .ftp.*; import .*; import java.io.*; public class FtpClientFrame extends JFrame { JPanel contentPane; Label labelPrompt = new Label(); // 状态提示 Label labelHost = new Label(); TextField textFieldHost = new TextField(); // 主机地址 Label labelUser = new La

23、bel(); TextField textFieldUser = new TextField(); // 用户名 Label labelPassword = new Label(); TextField textFieldPassword = new TextField(); // 密码 Button buttonLink = new Button(); // 连接按钮 Button buttonDisconnect = new Button(); // 断开按钮 Label l

24、abelFileShow = new Label(); TextArea textAreaContent = new TextArea(); // 显示文件和目录的文本域 Label labelFile = new Label(); TextField textFieldFile = new TextField(); // 要下载的文件名输入框 Label labelDir = new Label(); TextField textFieldDir = new TextField(); // 保存文件的本机目录名

25、 Button buttonDownload = new Button(); // 下载按钮 FtpClient myFtp = null; // FtpClient对象 TelnetInputStream inStream = null; // 输入流对象 public FtpClientFrame() { // 构造函数 try { jbInit();

26、 // 界面初始化并显示 } catch(Exception e) { e.printStackTrace(); } } // 界面初始化并显示 private void jbInit() throws Exception { contentPane = (JPanel) this.getContentPane(); contentPane.setLayout(null); labelPrompt.setBounds(new Rectangle(2

27、5, 6, 180, 22)); labelHost.setText("主机名:"); labelHost.setBounds(new Rectangle(25, 38, 50, 22)); textFieldHost.setBounds(new Rectangle(78, 38, 280, 22)); labelUser.setText("用户名:"); labelUser.setBounds(new Rectangle(25, 70, 50, 22)); textFieldUser.setBounds(new Rectangl

28、e(78, 70, 114, 22)); labelPassword.setText("密码:"); labelPassword.setBounds(new Rectangle(205, 70, 37, 22)); textFieldPassword.setBounds(new Rectangle(244, 70, 114, 22)); textFieldPassword.setEchoChar('*'); buttonLink.setLabel("连接"); buttonLink.setBounds(new Rectangle(

29、375, 38, 70, 22)); buttonLink.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { buttonLink_actionPerformed(e); } }); buttonLink.setEnabled(true); buttonDisconnect.setLabel("断开"); buttonDisconnect.set

30、Bounds(new Rectangle(375, 70, 70, 22)); buttonDisconnect.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { buttonDisconnect_actionPerformed(e); } }); buttonDisconnect.setEnabled(false); labelFileShow.setT

31、ext("目录列表"); labelFileShow.setBounds(new Rectangle(25, 105, 140, 22)); textAreaContent.setBounds(new Rectangle(25, 135, 420, 235)); textAreaContent.setEditable(false); labelFile.setText("欲下载的文件名:"); labelFile.setBounds(new Rectangle(25, 380, 100, 22)); textFieldFile

32、setBounds(new Rectangle(128, 380, 230, 22)); labelDir.setText("存放文件的路径:"); labelDir.setBounds(new Rectangle(25, 412, 100, 22)); textFieldDir.setBounds(new Rectangle(128, 412, 230, 22)); buttonDownload.setLabel("下载"); buttonDownload.setBounds(new Rectangle(375, 412, 70, 22

33、)); buttonDownload.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { buttonDownload_actionPerformed(e); } }); buttonDownload.setEnabled(false); contentPane.add(labelPrompt, null); contentPane.add(lab

34、elHost, null); contentPane.add(textFieldHost, null); contentPane.add(labelUser, null); contentPane.add(textFieldUser, null); contentPane.add(labelPassword, null); contentPane.add(textFieldPassword, null); contentPane.add(buttonLink, null); contentPane.add(buttonDis

35、connect, null); contentPane.add(labelFileShow, null); contentPane.add(textAreaContent, null); contentPane.add(textFieldFile, null); contentPane.add(labelFile, null); contentPane.add(labelDir, null); contentPane.add(textFieldDir, null); contentPane.add(buttonDownl

36、oad, null); enableEvents(AWTEvent.WINDOW_EVENT_MASK); this.setSize(new Dimension(480, 485)); this.setResizable(false); this.setTitle("ftp客户端"); this.setVisible(true); } // 响应“连接”按钮的点击消息,连接到服务器端 void buttonLink_actionPerformed(ActionEvent e) { String hostn

37、ame = textFieldHost.getText(); labelPrompt.setText("正在连接,请等待....."); try { myFtp = new FtpClient(hostname); // 构造一个对象 myFtp.login(textFieldUser.getText(), textFieldPassword.getText()); // 以给定用户名和密码登录 myFtp.binary(); // 表示文件以二进制模式传输 s

38、howFileContents(); // 列出服务器端当前目录下的目录和文件名 } catch(FtpLoginException e1) { String strPrompt = "用户名密码错误"; labelPrompt.setText(strPrompt); } catch (IOException e1) { String strPrompt = "连接主机:" + hostname + "失败!"; labelPrompt.setText(strPr

39、ompt); } catch(SecurityException e1) { String strPrompt = "无权限与主机:" + hostname + "连接!"; labelPrompt.setText(strPrompt); } labelPrompt.setText("连接主机:"+textFieldHost.getText()+"成功!"); buttonDisconnect.setEnabled(true); buttonDownload.setEnabled(true); b

40、uttonLink.setEnabled(false); } // 响应“断开”按钮的点击消息,连接到服务器端 void buttonDisconnect_actionPerformed(ActionEvent e) { try { myFtp.closeServer(); // 关闭与服务器端的连接 textAreaContent.setText(""); labelPrompt.setText("与主机断开连接"); } catch(IOException e1)

41、{ System.out.println("Error: " + e1); } buttonLink.setEnabled(true); buttonDownload.setEnabled(false); buttonDisconnect.setEnabled(false); } // 列出服务器端当前目录下的目录和文件名 public void showFileContents() { int ch; StringBuffer buf = new StringBuffer(); try

42、{ inStream= myFtp.list(); // 得到主机端当前目录下所有文件和目录的输入数据流 while ((ch=inStream.read())>=0) { // 从输入流中读取数据 buf.append((char)ch); // 保存数据到缓冲区 } textAreaContent.append(buf.toString()); // 将目录和文件名显示在文本框中 inStream.close();

43、 // 关闭输入流 } catch(Exception e) { System.out.println("Error: " + e); } } // 响应“断开”按钮的点击消息,连接到服务器端 void buttonDownload_actionPerformed(ActionEvent e) { int ch; StringBuffer buf = new StringBuffer(); buf.setLength(0); try { F

44、ile dir = new File(textFieldDir.getText()); // 通过路径构造文件 File f = new File(dir, textFieldFile.getText()); // 通过路径和文件名构造一个文件 RandomAccessFile file = new RandomAccessFile(f, "rw"); // 构造一个随机访问文件 inStream = myFtp.get(textFieldFile.getText()); // 得到所选文

45、件的输入流 while((ch = inStream.read())>=0) { // 读取数据流 buf.append((char)ch); // 将读取的数据存在缓冲区中 } file.writeBytes(buf.toString()); // 将缓冲区中的数据以字符串形式写入文件 file.close();

46、 // 关闭文件 JOptionPane msg = new JOptionPane(); // 提示对话框 JOptionPane.showMessageDialog(FtpClientFrame.this, "下载成功", "下载成功!", 1); } catch(Exception e1) { System.out.println("Error: " + e1); } } // 关闭窗口 protected void pr

47、ocessWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { try { if(inStream != null) inStream.close(); } catch(IOException e1) { System.out.println("Error: " + e1); } System.

48、exit(0); } } // 主函数 public static void main(String[] args) { new FtpClientFrame(); } } 第四部分 分组名单 序号 组长 组员1 组员2 组员3 组员4 1 2 3 4 5 6 7 8 9 10 11 12 第五部分 要求 在本周五交课程设计文档(打印稿与电子版),如有特殊情况需提前告知,否则按本门课程不及格处理。

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服