20145208 《Java程序设计》第10周学习总结
教材学习内容总结
了解JAVA网络编程的基础知识
- 这一部分知识的学习在我的实验中有叙述实验五
- 补充内容:
- 在现有的网络中,网络通讯的方式主要有两种:
- TCP(传输控制协议)方式
- UDP(用户数据报协议)方式
- 这两种传输方式都是实际的网络编程中进行使用,重要的数据一般使用TCP方式进行数据传输,而大量的非核心数据则都通过UDP方式进行传递,在一些程序中甚至结合使用这两种方式进行数据的传递。
Java网络编程技术
- 一个基础的网络类——InetAddress类
- InetAddressDemo.java
- 运行结果如下:
- 该类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。
TCP编程
-
按照前面的介绍,网络通讯的方式有TCP和UDP两种,其中TCP方式的网络通讯是指在通讯的过程中保持连接,如果发送的一方发送的数据接收方觉得有问题,则网络底层会自动要求发送方重发,直到接收方收到为止。
-
在客户端网络编程中,首先需要建立连接,在Java API中以java.net.Socket类的对象代表网络连接,所以建立客户端网络连接,也就是创建Socket类型的对象,该对象代表网络连接,示例如下:
Socket socket1 = new Socket(“192.168.1.103”,10000); Socket socket2 = new Socket(“www.sohu.com”,80);
-
上面的代码中,socket1实现的是连接到IP地址是192.168.1.103的计算机的10000号端口,而socket2实现的是连接到域名是www.sohu.com的计算机的80号端口,至于底层网络如何实现建立连接,对于程序员来说是完全透明的。如果建立连接时,本机网络不通,或服务器端程序未开启,则会抛出异常。
-
连接一旦建立,则完成了客户端编程的第一步,紧接着的步骤就是按照“请求-响应”模型进行网络数据交换,在Java语言中,数据传输功能由Java IO实现,也就是说只需要从连接中获得输入流和输出流即可,然后将需要发送的数据写入连接对象的输出流中,在发送完成以后从输入流中读取数据即可。示例代码如下:
OutputStream os = socket1.getOutputStream(); //获得输出流 InputStream is = socket1.getInputStream(); //获得输入流
-
上面的代码中,分别从socket1这个连接对象获得了输出流和输入流对象,在整个网络编程中,后续的数据交换就变成了IO操作,也就是遵循“请求-响应”模型的规定,先向输出流中写入数据,这些数据会被系统发送出去,然后在从输入流中读取服务器端的反馈信息,这样就完成了一次数据交换过程,当然这个数据交换过程可以多次进行。
-
简单的Socket客户端SimpleSocketClient.java
-
echo服务器SimpleSocketServer.java
-
运行结果如下:
-
这样,就以一个很简单的示例演示了TCP类型的网络编程在Java语言中的基本实现,这个示例只是演示了网络编程的基本步骤以及各个功能方法的基本使用,只是为网络编程打下了一个基础。
-
复用连接的Socket客户端MulSocketClient.java服务器MulSocketServer.java
-
运行结果:
- 支持多客户端的服务器端实现MulThreadSocketServer.java
UDP编程
-
网络通讯的方式除了TCP方式以外,还有一种实现的方式就是UDP方式。UDP(User Datagram Protocol),中文意思是用户数据报协议,方式类似于发短信息,是一种物美价廉的通讯方式,使用该种方式无需建立专用的虚拟连接,由于无需建立专用的连接,所以对于服务器的压力要比TCP小很多,所以也是一种常见的网络编程方式。但是使用该种方式最大的不足是传输不可靠,当然也不是说经常丢失,就像大家发短信息一样,理论上存在收不到的可能,这种可能性可能是1%,反正比较小,但是由于这种可能的存在,所以平时我们都觉得重要的事情还是打个电话吧(类似TCP方式),一般的事情才发短信息(类似UDP方式)。网络编程中也是这样,必须要求可靠传输的信息一般使用TCP方式实现,一般的数据才使用UDP方式实现。
-
UDP客户端编程涉及的步骤也是4个部分:建立连接、发送数据、接收数据和关闭连接。
-
简单的UDP客户端SimpleUDPClient.java服务器SimpleUDPServer.java
-结果如下:
网络协议
-
网络协议的实质也是客户端程序和服务器端程序对于数据的一种约定,只是由于以计算机为基础,所以更多的是使用数字来代表内容,这样就显得比较抽象一些。
-
在网络编程中,对于同一个网络程序来说,一般都会涉及到两个网络协议格式:客户端发送数据格式和服务器端反馈数据格式,在实际设计时,需要一一对应。这就是最基本的网络协议的知识。
-
网络协议设计完成以后,在进行网络编程时,就需要根据设计好的协议格式,在程序中进行对应的编码了,客户端程序和服务器端程序需要进行协议处理的代码分别如下。
-
客户端程序需要完成的处理为:
- 1、 客户端发送协议格式的生成
- 2、 服务器端反馈数据格式的解析
-
服务器端程序需要完成的处理为:
- 1、 服务器端反馈协议格式的生成
- 2、 客户端发送协议格式的解析
质数判别示例
-
网络程序的功能都分为客户端程序和服务器端程序实现,下面先描述一下每个程序分别实现的功能:
-
1、 客户端程序功能:
- a) 接收用户控制台输入
- b) 判断输入内容是否合法
- c) 按照协议格式生成发送数据
- d) 发送数据
- e) 接收服务器端反馈
- f) 解析服务器端反馈信息,并输出
-
2、 服务器端程序功能:
- a) 接收客户端发送数据
- b) 按照协议格式解析数据
- c) 判断数字是否是质数
- d) 根据判断结果,生成协议数据
- e) 将数据反馈给客户端
-
运行结果如下:
猜数字小游戏
-
客户端程序功能列表:
-
1、 接收用户控制台输入
-
2、 判断输入内容是否合法
-
3、 按照协议格式发送数据
-
4、 根据服务器端的反馈给出相应提示
-
服务器端程序功能列表:
- 1、 接收客户端发送数据
- 2、 按照协议格式解析数据
- 3、 判断发送过来的数字和随机数字的关系
- 4、 根据判断结果生产协议数据
- 5、 将生产的数据反馈给客户端
-
结果如下:
其他(感悟、思考)
- 本周的学习又进入了一个之前没有接触的领域,每个知识点都很新鲜,感觉曾经神秘的网络编程已经在自己的脑袋里有了一个基本的认识,对于不懂的知识的学习能力也更强了,更会利用API和DEBUG来弄懂一段代码,搞清楚一系列的原理,知其然也知其所以然。
- 虽然学的东西越来越脱离课本了,但是感觉自己确实越来越充实,学到的越来越多了,本周学习的网络编程的内容也是我们团队做项目的时候很重要的一部分,通过本周的学习,我也对我们的项目有了一个新的认识和理解,思路更加明确。
- 对于JAVA的学习课程只剩下了六周而已了,希望自己可以学到更多。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | 成为超过高级初学者的存在 |
第一周 | 150/150 | 1/3 | 15/15 | 第一个JAVA程序 |
第二周 | 150/300 | 2/5 | 20/35 | 第一次对教材代码进行自己的修改 |
第三周 | 400/700 | 2/7 | 20/50 | 熟练的进行代码托管 |
第四周 | 1210/1910 | 2/9 | 30/80 | 在敲代码的时候有自己思考 |
第五周 | 1083/2993 | 1/10 | 40/120 | 学习API |
第六周 | 1061/4054 | 2/12 | 50/170 | 了解到了输入输出与线程 |
第七周 | 579/4633 | 2/14 | 40/210 | 学会了测试代码 |
第八周 | 523/5156 | 2/16 | 40/250 | 按照老师说的一个代码一个git |
第九周 | 592/5748 | 2/18 | 50/300 | 学会了SQL数据库的基本使用和编写简单的APP |
第十周 | 1420/7168 | 2/20 | 30/330 | 初步学习了网络编程的基础内容 |