20155304 2016-2017-2 《Java程序设计》第十周学习总结
教材学习内容总结
网络编程
- 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据。程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴。
网络概述
计算机网络概述
- 计算机网络的核心是由路由器和交换机组成。
- 网络最主要的优势在于共享:共享设备和数据。
- 对于网络编程来说,最主要的是计算机和计算机之间的通信,这样首要的问题就是了解IP地址的概念。
- 为了能够方便的识别网络上的每个设备,网络中的每个设备都会有一个唯一的数字标识,这个就是IP地址。
- 在计算机网络中,现在命名IP地址的规定是IPv4协议,该协议规定每个IP地址由4个0-255之间的数字组成。
- 每个接入网络的计算机都拥有唯一的IP地址,这个IP地址可能是固定的。
- 一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。
- 在网络中传输的数据,全部是以IP地址作为地址标识,所以在实际传输数据以前需要将域名转换为IP地址,实现这种功能的服务器称之为DNS服务器,也就是通俗的说法叫做域名解析。
- 端口可以让一个计算机同时运行多个网络程序。
- 在硬件上规定,端口的号码必须位于0-65535之间,每个端口唯一的对应一个网络程序,一个网络程序可以使用多个端口。
- 一个网络程序运行在一台计算上时,不管是客户端还是服务器,都是至少占用一个端口进行网络通讯。在接收数据时,首先发送给对应的计算机,然后计算机根据端口把数据转发给对应的程序。
网络编程概述
- 网络中的“请求-响应”模型,也就是通讯的一端发送数据,另外一端反馈数据,网络通讯都基于该模型。
- 在网络通讯中,第一次主动发起通讯的程序被称作客户端(Client)程序,简称客户端,而在第一次通讯中等待连接的程序被称作服务器端(Server)程序,简称服务器。一旦通讯建立,则客户端和服务器端完全一样,没有本质的区别。这种网络编程的结构被称作客户端/服务器结构,也叫做Client/Server结构,简称C/S结构。使用C/S结 构的程序,在开发时需要分别开发客户端和服务器端,这种结构的优势在于由于客户端是专门开发的,所以根据需要实现各种效果,专业点说就是表现力丰富,而服 务器端也需要专门进行开发。但是这种结构也存在着很多不足,例如通用性差,几乎不能通用等,也就是说一种程序的客户端只能和对应的服务器端通讯,而不能和 其它服务器端通讯,在实际维护时,也需要维护专门的客户端和服务器端,维护的压力比较大。
- 其实在运行很多程序时,没有必要使用专用的客户端,而需要使用通用的客户端,例如浏览器,使用浏览器作为客户端的结构被称作浏览器/服务器结构,也叫做Browser/Server结构,简称为B/S结构。使用B/S结构的程序,在开发时只需要开发服务器端即可,这种结构的优势在于开发的压力比较小,不需要维护客户端。但是这种结构也存在着很多不足,例如浏览器的限制比较大,表现力不强,无法进行系统级操作等。
- P2P程序是一种特殊的程序,应该一个P2P程序中既包含客户端程序,也包含服务器端程序。
- 协议是网络编程中传输的数据格式。
网络通讯方式
- 在现有的网络中,网络通讯的方式主要有两种:
- TCP(传输控制协议)方式
- UDP(用户数据报协议)方式
- 在网络通讯中,使用TCP方式进行网络通讯时,需要建立专门的虚拟连接,然后进行可靠的数据传输,如果数据发送失败,则客户端会自动重发该数据。而使用UDP方式进行网络通讯时,不需要建立专门的虚拟连接,传输也不是很可靠,如果发送失败则客户端无法获得。
- 由于TCP需要建立专用的虚拟连接以及确认传输是否正确,所以使用TCP方式的速度稍微慢一些,而且传输时产生的数据量要比UDP稍微大一些。
网络编程技术
网络编程步骤
- 客户端网络编程步骤
- 建立网络连接;
- 交换数据;
- 关闭网络连接。
- 服务器端网络编程步骤
- 监听端口,端口就是服务器端开放给客户端的端口,服务器端程序运行的本地计算机的IP地址就是服务器端程序的IP地址。
- 获得连接;
- 交换数据;
- 关闭连接,当服务器程序关闭时,需要关闭服务器端,通过关闭服务器端使得服务器监听的端口以及占用的内存可以释放出来,实现了连接的关闭。
Java网络编程技术
- 和网络编程有关的基本API位于java.net包中,该包中包含了基本的网络编程实现,该包是网络编程的基础。该包中既包含基础的网络编程类,也包含封装后的专门处理WEB相关的处理类。
- 一个基础的网络类——InetAddress类。该类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。
TCP编程
- 在Java语言中,对于TCP方式的网络编程提供了良好的支持,在实际实现时,以java.net.Socket类代表客户端连接,以java.net.ServerSocket类代表服务器端连接。
- LogicThread类实现对于一个客户端连接的逻辑处理,将处理的逻辑放置在该类的run方法中。
- 线程池(Thread pool)是池技术的一种,就是在程序启动时首先把需要个数的线程对象创建好。
- 在Java API中,实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现,分别是:DatagramSocket和DatagramPacket。
- UDP客户端编程涉及的步骤是4个部分:建立连接、发送数据、接收数据和关闭连接。
网络协议
-
网络协议的实质也是客户端程序和服务器端程序对于数据的一种约定。
-
在网络编程中,对于同一个网络程序来说,一般都会涉及到两个网络协议格式:客户端发送数据格式和服务器端反馈数据格式,在实际设计时,需要一一对应。这就是最基本的网络协议的知识。
-
客户端程序需要完成的处理为:1、 客户端发送协议格式的生成;2、 服务器端反馈数据格式的解析。
-
服务器端程序需要完成的处理为:1、 服务器端反馈协议格式的生成;2、 客户端发送协议格式的解析。
-
常见协议的格式,例如HTTP(Hyper Text Transfer Protocol,超文本传输协议)、FTP(File Transfer Protocol,文件传输协议),SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)等等,都有通用的规定,具体可以查阅相关的RFC文档。
教材学习中的问题和解决过程
- 利用InetAddress类取得的IP地址是自己的IP地址吗?和在命令行中得到的IP地址不同。
代码调试中的问题和解决过程
- 建立连接时,总是出现连接超时的问题,尚未解决。
上周考试错题总结
- 错题1及原因,理解情况
- 错题2及原因,理解情况
- ...
结对及互评
评分标准
-
正确使用Markdown语法(加1分):
- 不使用Markdown不加分
- 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
- 排版混乱的不加分
-
模板中的要素齐全(加1分)
- 缺少“教材学习中的问题和解决过程”的不加分
- 缺少“代码调试中的问题和解决过程”的不加分
- 代码托管不能打开的不加分
- 缺少“结对及互评”的不能打开的不加分
- 缺少“上周考试错题总结”的不能加分
- 缺少“进度条”的不能加分
- 缺少“参考资料”的不能加分
-
教材学习中的问题和解决过程, 一个问题加1分
-
代码调试中的问题和解决过程, 一个问题加1分
-
本周有效代码超过300分行的(加2分)
- 一周提交次数少于20次的不加分
-
其他加分:
- 周五前发博客的加1分
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进情况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深入的加1分
- 点评认真,能指出博客和代码中的问题的加1分
- 结对学习情况真实可信的加1分
-
扣分:
- 有抄袭的扣至0分
- 代码作弊的扣至0分
- 迟交作业的扣至0分
点评过的同学博客和代码
其他(感悟、思考等,可选)
这部分的内容和这学期所学的计算机网络中的知识相关,通过学习本周内容,对计网的知识加深了理解。通过本周的学习,了解了怎样用Java编写客户端和服务器,对大创项目有一定的帮助。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 10/10 | 1/1 | 10/20 | 简单了解了jdk,认识了Java语言学习的复杂性 |
第二周 | 70/100 | 1/1 | 18/25 | |
第三周 | 150/200 | 1/1 | 14/20 | |
第四周 | 200/300 | 1/1 | 15/20 | |
第五周 | 200/300 | 1/1 | 15/20 | |
第六周 | 350/500 | 1/1 | 15/20 | |
第七周 | 500/700 | 2/2 | 15/20 | |
第八周 | 500/700 | 1/1 | 15/20 | |
第九周 | 300/700 | 2/2 | 15/20 | |
第十周 | 300/700 | 1/1 | 15/20 |
-
计划学习时间:20小时
-
实际学习时间:15小时