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. sqlite数据库 select 查询带换行符数据

    在sqlite 数据库中用 select 语句查询带 换行符的 数据信息 实现 SELECT   * from questions_exec where title like     '%'||x'0 ...

  2. 好RESTful API的设计原则

    说在前面,这篇文章是无意中发现的,因为感觉写的很好,所以翻译了一下.由于英文水平有限,难免有出错的地方,请看官理解一下.翻译和校正文章花了我大约2周的业余时间,如有人愿意转载请注明出处,谢谢^_^ P ...

  3. olcal数据库经典SQL语句大全

    基于olacle自带的表 第一篇 -----1.列出至少有一个员工的所有部门. oracle 一些经典sql第一篇 --------1.列出至少有一个员工的所有部门.---------  SQL> ...

  4. openssl c_rehash

    一.简介 c_rehash 为文件创建一个符号连接,并将此符号连接的名称设为文件的hash值,作用是让openssl在证书目录中能够找到证书. 二.语法 c_rehash [-old] [-h] [- ...

  5. Android中Spanner获取选中内容和选中位置,根据位置选择对象

    作为一名菜鸟,关于spanner获取选中的内容文字代码,网上后很多 但是根据给出的位置来自动选择对象,这个代码一直没找到 后来找人问了问,才知道就一句话的事,特意在这里记录下 array.xml  X ...

  6. jQuery选择器简单例子

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="jQuery_5.aspx. ...

  7. 谈MongoDB读取连接超时的异常

    今天在现场的哥们发来异常,让我解决,错误信息如下: HTTP Status 500 - Read operation to server 192.168.1.110:20001 failed on d ...

  8. 如何实现ZBrush中的Alt和Shift键的快速运用

    ZBrush是一个数字雕刻和绘画软件,它以强大的功能和直观的工作流程彻底改变了整个三维雕刻行业.在一个简洁的界面中,ZBrush®为当代数字艺术家提供了世界上最先进的工具.利用快捷键能使操作更快捷高效 ...

  9. C# Process执行bat

    Process类 System.Diagnostics 命名空间提供类,使您能够与系统进程.事件日志和性能计数器进行交互. Process类提供对本地和远程进程的访问并使您能够启动和停止本地系统进程. ...

  10. Mobile Prototype Dev Res Collection(Unity原型开发资源储备)

    资源储备 本文针对mobile原型开发阶段的资源收集 在做移动端的开发时,当有灵感想做些东西时,若是此时缺少美术资源和可用的脚本,此刻会有些纠结,今天在Assets Store上Mark了一些移动端开 ...