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 30 Use Enums instead of int constants

    Enumerated type is a type whose legal values consist of a fixed set of constants, such as the season ...

  2. windows 下安装nginx

    1.首先去官网下载 nginxWindows版本,官网下载:http://nginx.org/en/download.html 选择最新版本,下载到软件包后,解压文件包到指定目录,例如我的目录是D:\ ...

  3. Andorid 内存溢出与内存泄露,几种常见导致内存泄露的写法

    内存泄露,大部分是因为程序的逻辑不严谨,但是又可以跑通顺,然后导致的,内存溢出不会报错,如果不看日志信息是并不知道有泄露的.但是如果一直泄露,然后最终导致的内存溢出,仍然会使程序挂掉.内存溢出大部分是 ...

  4. nginx看端口使用情况

    [root@iZ94j7ahvuvZ sbin]# netstat -apn Active Internet connections (servers and established) Proto R ...

  5. Hive query issue

    One time, I have written a query with two tables join, One table is big table with partitions , anot ...

  6. web工程 所需是jar包总结

    commons-beanutils-1.8.3.jar : BeanUtils主要提供了对于JavaBean进行各种操作,需要Commons -Collections包和Commons -loggin ...

  7. Windows路由表详解

    对于路由器的路由表,大部分网管朋友都很熟悉,但是对于windows的路由表,可能了解的人就相对少一些.今天我们就一起来看看windows路由表.   一. windows路由表条目解释 1. 使用ip ...

  8. Html5 Geolocation获取地理位置信息

    Html5中提供了地理位置信息的API,通过浏览器来获取用户当前位置.基于此特性可以开发基于位置的服务应用.在获取地理位置信息前,首先浏览器都会向用户询问是否愿意共享其位置信息,待用户同意后才能使用. ...

  9. div中的内容垂直居中的五种方法

    一.行高(line-height)法 如果要垂直居中的只有一行或几个文字,那它的制作最为简单,只要让文字的行高和容器的高度相同即可,比如: p { height:30px; line-height:3 ...

  10. UESTC 880 生日礼物 --单调队列优化DP

    定义dp[i][j]表示第i天手中有j股股票时,获得的最多钱数. 转移方程有: 1.当天不买也不卖: dp[i][j]=dp[i-1][j]; 2.当天买了j-k股: dp[i][j]=max(dp[ ...