20145208 《Java程序设计》第10周学习总结

教材学习内容总结

了解JAVA网络编程的基础知识

  • 这一部分知识的学习在我的实验中有叙述实验五
  • 补充内容:
  • 在现有的网络中,网络通讯的方式主要有两种:
    • TCP(传输控制协议)方式
    • UDP(用户数据报协议)方式
    • 这两种传输方式都是实际的网络编程中进行使用,重要的数据一般使用TCP方式进行数据传输,而大量的非核心数据则都通过UDP方式进行传递,在一些程序中甚至结合使用这两种方式进行数据的传递。

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

  • 运行结果:

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) 将数据反馈给客户端
  • 客户端程序TCPPrimeClient.java服务器TCPPrimeServer.java

  • 运行结果如下:

猜数字小游戏

  • 客户端程序功能列表:

  • 1、 接收用户控制台输入

  • 2、 判断输入内容是否合法

  • 3、 按照协议格式发送数据

  • 4、 根据服务器端的反馈给出相应提示

  • 服务器端程序功能列表:

    • 1、 接收客户端发送数据
    • 2、 按照协议格式解析数据
    • 3、 判断发送过来的数字和随机数字的关系
    • 4、 根据判断结果生产协议数据
    • 5、 将生产的数据反馈给客户端
  • 客户端TCPClient.java服务器TCPServer.java

  • 结果如下:

其他(感悟、思考)

  • 本周的学习又进入了一个之前没有接触的领域,每个知识点都很新鲜,感觉曾经神秘的网络编程已经在自己的脑袋里有了一个基本的认识,对于不懂的知识的学习能力也更强了,更会利用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 初步学习了网络编程的基础内容

参考资料

20145208 《Java程序设计》第10周学习总结的更多相关文章

  1. 2018面向对象程序设计(Java)第10周学习指导及要求

    2018面向对象程序设计(Java)第10周学习指导及要求(2018.11.1-2018.11.4)  学习目标 理解泛型概念: 掌握泛型类的定义与使用: 掌握泛型方法的声明与使用: 掌握泛型接口的定 ...

  2. 面向对象程序设计(JAVA) 第10周学习指导及要求

    2019面向对象程序设计(Java)第10周学习指导及要求 (2019.11.1-2019.11.4)   学习目标 1.掌握java异常处理技术: 2.了解断言的用法: 3.了解日志的用途: 4.掌 ...

  3. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  4. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  5. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  6. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  7. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  8. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  9. 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结

    20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...

  10. 20155304田宜楠 2006-2007-2 《Java程序设计》第二周学习总结

    20155304田宜楠 2006-2007-2 <Java程序设计>第二周学习总结 教材学习内容总结 一.类型与变量 1.类型 整数: 可细分为为short整数(占2字节),int整数(占 ...

随机推荐

  1. Effective Java 44 Write doc comments for all exposed API elements

    Principle You must precede every exported class, interface, constructor, method, and field declarati ...

  2. WebAPP与原生APP的交互设计区别

    WebAPP和原生APP同为移动端,很少有研究这两项的交互区别,最近公司做了一次从原生APP到WebAPP(HTML5 )的移植,故总结一下期间遇到的问题及不同点总结. 从使用场景上,WebAPP用户 ...

  3. java微信接口之二—获取用户组

    一.微信获取用户组接口简介 1.请求 该请求也是GET方式请求.请求的url格式如下: https://api.weixin.qq.com/cgi-bin/groups/get?access_toke ...

  4. Hive权限控制和超级管理员的实现

    Hive权限控制 Hive权限机制: Hive从0.10可以通过元数据控制权限.但是Hive的权限控制并不是完全安全的.基本的授权方案的目的是防止用户不小心做了不合适的事情. 先决条件: 为了使用Hi ...

  5. python module getopt usage

    import getopt import sys def usage(): print 'this is a usage.' def main(): try: print sys.argv #sys. ...

  6. [译] C track: compiling C programs.

    原文:C track: compiling C programs. C track: compiling C programs. 尽管有些计算机语言(如 Schema 或者 Basic)通常使用交互式 ...

  7. C++STL之迭代器2

    在学习c++ STL的时候,整天碰到迭代器,也整天用,但是,到底它是个什么东西,很多人没有一个认识.这里我通过几个小的DEMO,来看看迭代器.首先我实现了一个十分简陋的vector类: templat ...

  8. Java语法结构

    一.顺序结构(从上往下依次执行) 顺序结构语法比较简单,从上往下依次执行即可. 二.选择结构(选择性执行,如果....则.....) 1.if 语句 if语句,作用是根据判断结果为真或假,选择其中一个 ...

  9. 【MVC 4】1.第一个 MVC 应用程序

    作者:[美]Adam Freeman      来源:<精通ASP.NET MVC 4> ASP.NET MVC 是微软的一个 Web开发框架,它整合了“模型—视图—控制器(MVC)”架构 ...

  10. codeforces 711D D. Directed Roads(dfs)

    题目链接: D. Directed Roads time limit per test 2 seconds memory limit per test 256 megabytes input stan ...