20155308 2016-2017-2 《Java程序设计》第10周学习总结

教材学习内容总结

网络概述

  • 计算机网络:通过一定的物理设备将处于不同位置的计算机连接起来组成的网络,这个网络中包含的设备有:计算机、路由器、交换机等等。

    1. IP地址:网络中的每个设备都会有一个唯一的数字标识,命名IP地址的规定是IPv4协议,该协议规定每个IP地址由4个0-255之间的数字组成。
    2. 域名:一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。
    3. 域名解析:通过DNS服务器将域名转换为IP地址。
    4. 端口(port):在同一个计算机中每个程序对应唯一的端口,这样一个计算机上就可以通过端口区分发送给每个端口的数据了,也就是一个计算机上可以并发运行多个网络程序,而不会在互相之间产生干扰。

网络编程概述

  • 网络通讯的方式

    1. TCP(传输控制协议)方式
    2. UDP(用户数据报协议)方式

    这两种传输方式都是实际的网络编程中进行使用,重要的数据一般使用TCP方式进行数据传输,而大量的非核心数据则都通过UDP方式进行传递,在一些程序中甚至结合使用这两种方式进行数据的传递。

  • 网络编程技术

  • 客户端的编程主要由三个步骤实现:

    1. 建立网络连接:建立网络连接时需要指定连接到的服务器的IP地址和端口号
    2. 交换数据
    3. 关闭网络连接
  • 服务器端网络编程步骤

服务器端一般实现程序的核心逻辑以及数据存储等核心功能四个步骤:

  1. 监听端口
  2. 获得连接
  3. 交换数据
  4. 关闭连接
  • Java网络编程技术:
  1. 一个基础的网络类——InetAddress类。该类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。
  2. InetAddressDemo.java代码运行示例如下

TCP编程

  • 网络通讯的方式有TCP和UDP两种,其中TCP方式的网络通讯是指在通讯的过程中保持连接,如果发送的一方发送的数据接收方觉得有问题,则网络底层会自动要求发送方重发,直到接收方收到为止。
  • TCP客户端编程:
  1. 在客户端网络编程中,首先需要建立连接,在Java API中以java.net.Socket类的对象代表网络连接,所以建立客户端网络连接,也就是创建Socket类型的对象,该对象代表网络连接,示例如下:
Socket socket = new Socket(“192.168.1.103”,10000);
  1. 连接一旦建立,则完成了客户端编程的第一步,紧接着的步骤就是按照“请求-响应”模型进行网络数据交换,在Java语言中,数据传输功能由Java IO实现,也就是说只需要从连接中获得输入流和输出流即可,然后将需要发送的数据写入连接对象的输出流中,在发送完成以后从输入流中读取数据即可:
OutputStream os = socket1.getOutputStream();   //获得输出流
InputStream is = socket1.getInputStream(); //获得输入流
  1. 最后当数据交换完成以后,关闭网络连接,释放网络连接占用的系统端口和内存等资源,完成网络操作:
socket.close();
SimpleSocketClient.java

SimpleSocketClient.java代码运行示例如下:

  • TCP服务器编程
  1. 在服务器端程序编程中,由于服务器端实现的是被动等待连接,所以服务器端编程的第一个步骤是监听端口,也就是监听是否有客户端连接到达:
ServerSocket ss = new ServerSocket(10000);
  1. 然后是获得连接,当有客户端连接到达时,建立一个和客户端连接对应的Socket连 接对象,从而释放客户端连接对于服务器端端口的占用:
Socket socket = ss.accept();
  1. 连接获得以后,后续的编程就和客户端的网络编程类似了,这里获得的Socket类型的连接就和客户端的网络连接一样了,只是服务器端需要首先读取发送过来的数据,然后进行逻辑处理以后再发送给客户端,也就是交换数据的顺序和客户端交换数据的步骤刚好相反。
  2. 最后,在服务器端通信完成以后,关闭服务器端连接:
ss.close();

代码运行示例如下:

复用连接客户端:

  • 建立连接以后,将数据交换的逻辑写到一个循环中,这样只要循环不结束则连接就不会被关闭,可以用这样的方式来实现建立一次连接,进行多次数据交换。

MulSocketClient.java代码运行示例如下:

复用连接服务器:

  • 按照客户端实现的逻辑,也可以复用服务器端的连接,实现的原理也是将服务器端的数据交换逻辑写在循环中。

MulSocketServer.java代码运行示例如下:

多客户端的服务器:

  1. 一个服务器端一般都需要同时为多个客户端提供通讯,当服务器端接收到一个连接时,启动一个专门的线程处理和该客户端的通讯,这样就可以支持多个客户端。
  2. MulThreadSocketServer类实现服务器端控制,实现接收客户端连接,然后开启专门的逻辑线程处理该连接,LogicThread类实现对于一个客户端连接的逻辑处理,将处理的逻辑放置在该类的run方法中。

UDP编程

UDP客户端编程:

  1. 建立连接
  2. 发送数据
  3. 接收数据
  4. 关闭连接。

SimpleUDPClient.java代码运行示例如下:

UDP服务器编程:

  • 基本上也与TCP服务器编程类似,不过使用的对象不同。

SimpleUDPServer.java代码运行示例如下:

这个代码我的运行有问题,还未解决!

网络协议

  • 网络协议的实质也是客户端程序和服务器端程序对于数据的一种约定,只是由于以计算机为基础,所以更多的是使用数字来代表内容,这样就显得比较抽象一些。
  • 客户端程序需要完成的处理为:
  1. 客户端发送协议格式的生成
  2. 服务器端反馈数据格式的解析
  • 服务器端程序需要完成的处理为:
  1. 服务器端反馈协议格式的生成
  2. 客户端发送协议格式的解析

质数判别示例

  • 客户端程序功能:
  1. 接收用户控制台输入
  2. 判断输入内容是否合法
  3. 按照协议格式生成发送数据
  4. 发送数据
  5. 接收服务器端反馈
  6. 解析服务器端反馈信息,并输出

代码运行示例如下:

  • 服务器端程序功能:
  1. 接收客户端发送数据
  2. 按照协议格式解析数据
  3. 判断数字是否是质数
  4. 根据判断结果,生成协议数据
  5. 将数据反馈给客户端

代码运行示例如下:

猜数字小游戏

  • 客户端程序功能列表:
  1. 接收用户控制台输入
  2. 判断输入内容是否合法
  3. 按照协议格式发送数据
  4. 根据服务器端的反馈给出相应提示
  • 服务器端程序功能列表:
  1. 接收客户端发送数据
  2. 按照协议格式解析数据
  3. 判断发送过来的数字和随机数字的关系
  4. 根据判断结果生产协议数据
  5. 将生产的数据反馈给客户端

代码调试中的问题

  • 问题1:为什么会出现这种情况

  • 问题1解决:我认为是运行过慢的结果,因为在多次尝试后一段时间就会出现结果,但是并不确定

  • 问题2:为什么会出现这种情况

  • 问题2解决:我看到学长的博客中写到了这个问题,是因为端口号被占用了,改了一个端口号就好了。

代码托管

上周考试错题总结

  • 错题1:在下面,你将看到一堆杂乱的类与接口,这是取自一个动作冒险游戏。你将看到代表游戏角色的类,以及武器行为的类。每个角色一次只能使用一个武器,但是可以在游戏的过程中换武器。你的工作是要弄清楚这一切. . .

    a) 把下面散乱的类画成一个UML类图, 找出一个抽象类、一个接口、以及四个具体类,画出类之间的关系:继承,实现接口
  • 理解情况:King,Queen继承Character抽象类, AxeBehavior、BowAndArrayBehavior实现WeaponBehavior接口,Character依赖WeaponBehavior。这个问题的错误体现了我对接口和继承方面知识的不了解,并没有很好地熟练地掌握这方面的知识,自己在今后的学习中应该多加注意!

结对及互评

点评过的同学博客和代码

其他(感悟、思考等,可选)

  • 本周的学习是进行网络编程,学习网络编程,感觉还是挺难的,毕竟之前从来没有接触过与网络有关的编程内容,其实当自己真正接触到的时候才会发现并没有想象中的那么难理解,很有趣。通过新的知识的学习,使我感觉更加了解了网络知识。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第十周 872/4475 1/13 30/231

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。 耗时估计的公式 :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。 参考:软件工程软件的估计为什么这么难软件工程 估计方法

参考资料 - Java学习笔记(第8版) - 《Java学习笔记(第8版)》学习指导 - ...

20155308 2016-2017-2 《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. 20155333 2016-2017-2 《Java程序设计》第九周学习总结

    20155333 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC(Java DataBase Connectivity) 驱动的四种类型 JDBC- ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. [日常]蒟蒻的高一生活 Week 4

    啊啊啊好颓啊...石乐志 (药丸...最近更新的全都是日常了...(果然只做内部题效果滑稽)) 正在考虑把日常部分从科别体改成编日体(什么鬼)反正现在每天都能更新(x OI 整个一周 $dg$ 都没有 ...

  2. mysql之mof提权详解

    原理解读: Windows 管理规范 (WMI) 提供了以下三种方法编译到 WMI 存储库的托管对象格式 (MOF) 文件: 方法 1: 运行 MOF 文件指定为命令行参数将 Mofcomp.exe  ...

  3. java继承-静态绑定和动态绑定

    静态绑定和动态绑定: 静态:程序执行前方法已经被绑定,针对java简单可以理解为程序编译器已的绑定(静态绑定)java当中的方法是final.static.private构造方法都是前期绑定 动态:运 ...

  4. Linux中如何配置sudo用户

    Linux中的sudo文件在/etc/sudoers,但不建议直接修改此文件: 可以在/etc/sudoers.d文件夹中新建文件,文件名随意,在文件中添加内容如下: 用户名 ALL=(ALL) AL ...

  5. 深入剖析Swift性能优化

    简介 2014年,苹果公司在WWDC上发布Swift这一新的编程语言.经过几年的发展,Swift已经成为iOS开发语言的“中流砥柱”,Swift提供了非常灵活的高级别特性,例如协议.闭包.泛型等,并且 ...

  6. swift动态库与use_frameworks

    使用Dynamic 的优势: 模块化,相对于Static Library,Framework可以将模块中的函数代码外的资源文件打包在一起. 共享可执行文件 iOS 有沙箱机制,不能跨App间共享共态库 ...

  7. Appfuse搭建过程(下源代码不须要maven,lib直接就在项目里(否则痛苦死!))

    什么是Appfuse:AppFuse是一个集成了众多当前最流行开源框架与工具(包含Hibernate.ibatis.Struts.Spring.DBUnit.Maven.Log4J.Struts Me ...

  8. Linux下utf-8 BOM 的检查和删除 (65279错误解决办法)

    Java代码在转换为UTF-8编码后,Eclipse编译运行没有问题,但是用Maven编译时,抛出非法字符65278错误. 原因在于,转换后文件头部带有BOM信息,而Maven不支持,删掉文件头的BO ...

  9. BZOJ3791:作业(DP)

    Description 众所周知,白神是具有神奇的能力的. 比如说,他对数学作业说一声“数”,数学作业就会出于畏惧而自己完成:对语文作业说一声“语”,语文作业就会出于畏惧而自己完成. 今天,语文老师和 ...

  10. 人人开源之renren-security

    renren-security,从这周开始我将要对其比较详细的研究,之前的研究只不过是比较浅的.正如在这篇文章读读<编写高质量代码:改善Java程序的151条建议>中说过不要重复造轮子. ...