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

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

教材学习内容总结

学习目标

  1. 了解计算机网络基础
  2. 掌握Java Socket编程
  3. 理解混合密码系统
  4. 掌握Java 密码技术相关API的使用

教材学习内容总结

网络编程

网络概述

  • 网络编程就是两个或多个设备(程序)之间的数据交换。

  • 识别网络上的每个设备:①IP地址②域名(Domain Name)。一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。

  • DNS服务器(域名解析):在实际传输数据以前需要将域名转换为IP地址。

  • 端口:让一个计算机可以同时运行多个网络程序。端口的号码必须位于0-65535之间,每个端口唯一的对应一个网络程序,一个网络程序可以使用多个端口。

  • C/S结构:网络编程的结构被称作客户端/服务器结构,也叫做Client/Server结构。

  • B/S结构:使用浏览器作为客户端的结构被称作浏览器/服务器结构,也叫做Browser/Server结构。B/S结构其实也就是一种特殊的C/S结构。

  • P2P程序:P2P程序中既包含客户端程序,也包含服务器端程序,是一种特殊的程序。

  • 协议(Protocol):在实际进行数据交换时,为了让接收端理解该数据,计算机比较笨,什么都不懂的,那么就需要规定该数据的格式,这个数据的格式就是协议。那么如何来编写协议格式呢?答案是随意。只要按照这种协议格式能够生成唯一的编码,按照该编码可以唯一的解析出发送数据的内容即可。也正因为各个网络程序之间协议格式的不同,所以才导致了客户端程序都是专用的结构。

  • 在现有的网络中,网络通讯的方式主要有两种: ①TCP(传输控制协议)方式 ②UDP(用户数据报协议)方式

网络编程技术

  • 客户端的编程主要由三个步骤实现:
  1. 建立网络连接:在建立网络连接时需要指定连接到的服务器的IP地址和端口号。(出现重复)

  2. 交换数据:交换数据严格按照请求响应模型进行。

  3. 关闭网络连接。

  • 服务器端的编程是由四个步骤实现,依次是:
  1. 监听端口:这个端口就是服务器端开放给客户端的端口,服务器端程序运行的本地计算机的IP地址就是服务器
    端程序的IP地址。

  2. 获得连接:服务器端和客户端也通过该连接进行数据交换。一般获得连接时,需要开启专门的线程处理该连
    接,每个连接都由独立的线程实现。

  3. 交换数据。

  4. 关闭连接。
    InetAddress类:该类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。

  • TCP方式的网络编程实现时,以java.net.Socket类代表客户端连接,以java.net.ServerSocket类代表服务器端连接。由于高度的封装,程序员实际编程时,只需要指定IP地址和端口号码就可以建立连接了。一方面简化了Java语言网络编程的难度,另外也使得Java语言进行网络底层系统编程很困难,具体点说,Java语言无法实现底层的网络嗅探以及获得IP包结构等信息。

  • 实现服务器端监听的代码为:

    ServerSocket ss = new ServerSocket(10000);

  • 实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现,分别是:

  1. DatagramSocket:实现“网络连接”,包括客户端网络连接和服务器端网络连接。DatagramSocket实现的
    就是发送数据时的发射器,以及接收数据时的监听器的角色。类比于TCP中的网络连接,该类既可以用于实现客户
    端连接,也可以用于实现服务器端连接。

  2. DatagramPacket:实现对于网络中传输的数据封装,该类的对象代表网络中交换的数据。在UDP方式的网络
    编程中,无论是需要发送的数据还是需要接收的数据,都必须被处理成DatagramPacket类型的对象,该对象中
    包含发送到的地址、发送到的端口号以及发送的内容等。和TCP方式的网络传输相比,IO编程在UDP方式的网络编
    程中变得不是必须的内容,结构也要比TCP方式的网络编程简单一些。

网络协议

  • 网络协议是指对于网络中传输的数据格式的规定。网络协议设计完成以后,在进行网络编程时,就需要根据设计好的协议格式,在程序中进行对应的编码。

  • 客户端程序和服务器端程序需要进行协议处理的代码分别如下:

    • 客户端程序需要完成的处理为:
    • 客户端发送协议格式的生成
  • 服务器端反馈数据格式的解析

    • 服务器端程序需要完成的处理为:
      • 服务器端反馈协议格式的生成
      • 客户端发送协议格式的解析

教材学习中的问题和解决过程

  • 问题1:什么是网络协议?
  • 解决方案:
    1. 网络协议是指对于网络中传输的数据格式的规定。
    2. 在网络编程中,对于同一个网络程序来说,一般都会涉及到两个网络协议格式:客户端发送数据格式和服务器端反馈数据格式,在实际设计时,需要一一对应。
    3. 由于各种网络程序使用不同的协议格式,所以不同网络程序的客户端之间无法通用。而对于常见协议的格式,例如HTTP(Hyper Text Transfer Protocol,超文本传输协议)、FTP(File Transfer Protocol,文件传输协议)、SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)等等,都有通用的规定。
    4. 对于一种网络程序来说,网络协议格式是该程序最核心的技术秘密,因为一旦协议格式泄漏,则任何一个人都可以根据该格式进行客户心端的编写,这样将影响服务器端的实现,也容易出现一些其它的影响。

代码调试中的问题和解决过程

  • 问题1:
  • 解决方案:

代码托管

上周考试错题总结

  • 错题1:教材第十章示例代码中(p 305 IO .java )类符合SOLID原则中的OCP和DIP原则。
  • 理解情况:所有包含dump方法的都可以。

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)

    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分

  4. 代码调试中的问题和解决过程, 一个问题加1分

  5. 本周有效代码超过300分行的(加2分)

    • 一周提交次数少于20次的不加分
  6. 其他加分:

    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分
  7. 扣分:

    • 有抄袭的扣至0分
    • 代码作弊的扣至0分
    • 迟交作业的扣至0分

点评模板:

  • 博客中值得学习的或问题:

    • xxx
    • xxx
    • ...
  • 代码中值得学习的或问题:

    • xxx
    • xxx
    • ...
  • 基于评分标准,我给本博客打分:XX分。得分情况如下:xxx

  • 参考示例

点评过的同学博客和代码

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

虽然课本学完了,但是又接触到了新的东西。git的计算代码量脚本出了问题暂时还没能解决,用了前一天留下的截图,实际代码量应该要更多一些。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 18篇 300小时
第一周 15/15 1/1 15/15
第二周 159/174 1/2 20/35
第三周 414/588 1/3 18/53 了解了封装、对象
第四周 461/1049 1/4 18/71
第五周 786/1835 1/5 18/89
第六周 699/2534 1/6 20/109
第七周 536/3070 2/8 18/127
第八周 339/3409 1/9 15/142
第九周 984/4393 2/11 18/160
第十周 256/4646 1/12 18/178
  • 计划学习时间:16小时

  • 实际学习时间:18小时

参考资料

posted @ 2017-04-27 21:36  20155330  阅读(163)  评论(3编辑  收藏  举报