## 20155336 2016-2017-2《JAVA程序设计》第十周学习总结

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

学习任务

  • 完成学习资源中相关内容的学习
  • 参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学号 2016-2017-2 《Java程序设计》第十周学习总结”
    • 截止时间:本周日 24:00,不按时发博客要扣1分,优秀博客加1分
    • 严禁抄袭,违反者列入立此存照-抄袭作业者的曝光台

学习内容总结

网络编程

  • 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据。程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据。在发送和接收数据时,大部分的程序设计语言都设计了专门的API实现这些功能,程序员只需要调用即可。

网络概述

  • 1.1计算机网络概述:

    照计算机网络的定义,通过一定的物理设备将处于不同位置的计算机连接起来组成的网络,这个网络中包含的设备有:计算机、路由器、交换
    
    机等等。
    
    路由器和交换机组成了核心的计算机网络,计算机只是这个网络上的节点以及控制等,通过光纤、网线等连接将设备连接起来,从而形成了
    
    一张巨大的计算机网络。
    
    为了能够方便的识别网络上的每个设备,网络中的每个设备都会有一个唯一的数字标识,这个就是IP地址。
    
    一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。
    
    注意: 在硬件上规定,端口的号码必须位于0-65535之间,每个端口唯一的对应一个网络程序,一个网络程序可以使用多个端口。
    
  • 1.2网络编程概述:
    网络编程就是两个或多个设备之间的数据交换,其实更具体的说,网络编程就是两个或多个程序之间的数据交换,和普通的单机程序相比,
    
    网络程序最大的不同就是需要交换数据的程序运行在不同的计算机上,这样就造成了数据交换的复杂。
    
    “请求-响应”模型:也就是通讯的一端发送数据,另外一端反馈数据,网络通讯都基于该模型。
    
    客户端/服务器结构:也叫做Client/Server结构,简称C/S结构。一旦通讯建立,则客户端和服务器端完全一样,没有本质的区别。这种结
    
    构的优势表现力丰富,而服务器端也需要专门进行开发。但是这种结构也存在着很多不足,例如通用性差,实际维护时,也需要维护专门的
    
    客户端和服务器端,维护的压力比较大。
    
    浏览器/服务器结构:也叫做Browser/Server结构,简称为B/S结构。 使用B/S结构的程序,在开发时只需要开发服务器端即可,这种结构
    
    的优势在于开发的压力比较小,不需要维护客户端。
    
    P2P(Point to Point)程序:是一种特殊的程序,应该一个P2P程序中既包含客户端程序,也包含服务器端程序。
    
    协议(Protocol):网络中传输的数据格式在网络编程中就被称作协议。
    
  • 1.3网络通讯方式:
    1、TCP(传输控制协议)方式 :TCP方式就类似于拨打电话,使用该种方式进行网络通讯时,需要建立专门的虚拟连接,然后进行可靠的数据
    
    传输,如果数据发送失败,则客户端会自动重发该数据。
    
    2、 UDP(用户数据报协议)方式:而UDP方式就类似于发送短信,使用这种方式进行网络通讯时,不需要建立专门的虚拟连接,传输也不是很
    
    可靠,如果发送失败则客户端无法获得。
    
    小结:重要的数据一般使用TCP方式进行数据传输,而大量的非核心数据则都通过UDP方式进行传递,在一些程序中甚至结合使用这两种方式
    
    进行数据的传递。由于TCP需要建立专用的虚拟连接以及确认传输是否正确,所以使用TCP方式的速度稍微慢一些,而且传输时产生的数据量
    
    要比UDP稍微大一些。
    

网络编程技术

  • 2.1网络编程步骤

    这里的步骤实现和语言无关,也就是说,这个步骤适用于各种语言实现。

  • 2.1.1客户端网络编程步骤:
    • 建立网络连接:客户端网络编程的第一步都是建立网络连接。在建立网络连接时需要指定连接到的服务器的IP地址和端口号,建立完成以后,会形成一条虚拟的连接,后续的操作就可以通过该连接实现数据交换了。
    • 交换数据:连接建立以后,就可以通过这个连接交换数据了。交换数据严格按照请求响应模型进行,由客户端发送一个请求数据到服务器,服务器反馈一个响应数据给客户端,如果客户端不发送请求则服务器端就不响应。根据逻辑需要,可以多次交换数据,但是还是必须遵循请求响应模型。
    • 关闭网络连接:在数据交换完成以后,关闭网络连接,释放程序占用的端口、内存等系统资源,结束网络编程。
  • 2.1.2服务器端网络编程步骤:
    • 监听端口:服务器端属于被动等待连接,所以服务器端启动以后,不需要发起连接,而只需要监听本地计算机的某个固定端口即可。
    • 获得连接:当客户端连接到服务器端时,服务器端就可以获得一个连接,这个连接包含客户端的信息,例如客户端IP地址等等,服务器端和客户端也通过该连接进行数据交换。
    • 交换数据:当客户端连接到服务器端时,服务器端就可以获得一个连接,这个连接包含客户端的信息,例如客户端IP地址等等,服务器端和客户端也通过该连接进行数据交换。
    • 关闭连接:当服务器程序关闭时,需要关闭服务器端,通过关闭服务器端使得服务器监听的端口以及占用的内存可以释放出来,实现了连接的关闭。
  • Java网络编程技术
    和网络编程有关的基本API位于java.net包中,该包中包含了基本的网络编程实现,该包是网络编程的基础。该包中既包含基础的网络编程
    
    类,也包含封装后的专门处理WEB相关处理类。
    
    一个基础的网络类——InetAddress类。该类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。
    
  • TCP编程
    如果发送的一方发送的数据接收方觉得有问题,则网络底层会自动要求发送方重发,直到接收方收到为止。
    
    在Java语言中,对于TCP方式的网络编程提供了良好的支持,在实际实现时,以java.net.Socket类代表客户端连接,以java.net.ServerSocket类代表服务器端连接。
    
  • UDP编程
    UDP(User Datagram Protocol),中文意思是用户数据报协议,方式类似于发短信息,是一种物美价廉的通讯方式,使用该种方式无需建
    
    立专用的虚拟连接。
    
    网络编程中也是这样,必须要求可靠传输的信息一般使用TCP方式实现,一般的数据才使用UDP方式实现。
    
    在Java API中设计的实现结构和TCP方式不太一样。当然,需要使用的类还是包含在java.net包中。
    
    在Java API中,实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现:
    
    1、DatagramSocket类实现“网络连接”,包括客户端网络连接和服务器端网络连接。
    
    2、DatagramPacket类实现对于网络中传输的数据封装,也就是说,该类的对象代表网络中交换的数据。在UDP方式的网络编程中,无论是
    
    需要发送的数据还是需要接收的数据,都必须被处理成DatagramPacket类型的对象,该对象中包含发送到的地址、发送到的端口号以及发
    
    送的内容等。
    

网络协议

    网络协议是指对于网络中传输的数据格式的规定。网络协议的实质也是客户端程序和服务器端程序对于数据的一种约定,只是由于以计算机

    为基础,所以更多的是使用数字来代表内容,这样就显得比较抽象一些。

    网络协议就是一种格式上的约定,可以根据逻辑的需要约定出各种数据格式,在进行设计时一般遵循“简单、通用、容易解析”的原则进行。

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

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

    网络协议格式是该程序最核心的技术秘密,因为一旦协议格式泄漏,则任何一个人都可以根据该格式进行客户端的编写,这样将影响服务器

    端的实现,也容易出现一些其它的影响。

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

  • 首先关于IP地址和域的关系,并不太懂之间的联系,是IP包含域?还是域包含IP地址?这块的知识在计算机网络上就存在些许的问题。我觉得这篇文章将IP地址和域比喻成手机号码和手机通讯录名单,一个人可以有很多个手机号码,可是一个手机号码只能有一个人对应。同理,一个域名可以对应许多个IP地址,但是一个IP地址只能有一个IP地址。
  • 同样的什么是域?之前只是很简单的讲了域和IP地址的关系,但是域的具体定义却没有给出。百度后"域"的真正含义指的是服务器控制网络上的计算机能否加入的计算机组合。
  • 是关于协议的问题,协议存在的具体作用是什么?学习过后对于这个问题有了了解,协议的真正作用是一种格式,对于不同的电脑,不同的程序有不同的数据格式,而对于这种数据格式的规定就是协议。

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

    package cc.openhome;

    import java.net.*;

    public class InetAddressDemo {
    public static void main(String[] args) {
           try{
                    //使用域名创建对象
                    InetAddress inet1 = InetAddress.getByName("www.163.com");
                    System.out.println(inet1);
                    //使用IP创建对象
                    InetAddress inet2 = InetAddress.getByName("127.0.0.1");
                    System.out.println(inet2);
                    //获得本机地址对象
                    InetAddress inet3 = InetAddress.getLocalHost();
                    System.out.println(inet3);
                    //获得对象中存储的域名
                    String host = inet3.getHostName();
                    System.out.println("域名:" + host);
                    //获得对象中存储的IP
                    String ip = inet3.getHostAddress();
                    System.out.println("IP:" + ip);
           }catch(Exception e){}
    }
}

关于这段代码,是按照学习材料上操作过来的,但是最开始显示失败了,后来又仔细看学习材料,java这个网络InetAddress类必须有网络的连接才可以使用。

  • 关于TCP编程连接部分,以java.net.Socket类代表客户端连接,以java.net.ServerSocket类代表服务器端连接。所以建立客户端网络连接,也就是创建Socket类型的对象,该对象代表网络连接。

    Socket socket1 = new Socket(“192.168.1.103”,10000);
    Socket socket2 = new Socket(“www.blog.com”,80);
    

    关于这段代码,socket1实现的是连接到IP地址是192.168.1.103的计算机的10000号端口,而socket2实现的是连接到域名是www.blog.com的计算机的80号端口,如果建立连接时,本机网络不通,或服务器端程序未开启,则会抛出异常。

  • 关于如何复用Socket连接?通过看才料后,其实很简单,建立连接以后,将数据交换的逻辑写到一个循环中就可以了。这样只要循环不结束则连接就不会被关闭。
    package tcp;
    import java.io.;
    import java.net.;
    
    public class MulSocketClient {
    public static void main(String[] args) {
       Socket socket = null;
       InputStream is = null;
       OutputStream os = null;
       //服务器端IP地址
       String serverIP = "127.0.0.1";
       //服务器端端口号
       int port = 10000;
       //发送内容
       String data[] ={"First","Second","Third"};
       try {
                //建立连接
                socket = new Socket(serverIP,port);
                //初始化流
                os = socket.getOutputStream();
                is = socket.getInputStream();
                byte[] b = new byte[1024];
                for(int i = 0;i < data.length;i++){
                         //发送数据
                         os.write(data              [i].getBytes());
                         //接收数据
                         int n = is.read(b);
                         //输出反馈数据
                         System.out.println             ("服务器反馈:" + new String(b,0,n));
                }
       } catch (Exception e) {
                e.printStackTrace(); //打印异常信息
       }finally{
                try {
                         //关闭流和连接
                         is.close();
                         os.close();
                         socket.close();
                } catch (Exception e2) {}
       }
    }
    }
    

这段代码将数据交换部分的逻辑写在一个for循环的内容,这样就可以建立一次连接,依次将data数组中的数据按照顺序发送给服务器端了。就可以实现复用Socket连接。

代码托管

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

    这周是学习的内容是学习网络编程,已经到了java语言运用的地方了,很多知识点在其他的课堂上有接触,但发现还是有不足,这周的代码

    更多的主要还是学习材料里的代码进行操作,自己的动手编译程序的水平还欠缺一点。虽然到了java运用的时候,但还是要把握好java语言

    基本的知识点,这才是最重要的。

评分标准(满分10分)

  1. 从0分加到10分为止
  2. 正确使用Markdown语法(加1分):
    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  3. 模板中的要素齐全(加1分)
    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  4. 教材学习中的问题和解决过程, 一个问题加1分
  5. 代码调试中的问题和解决过程, 一个问题加1分
  6. 本周有效代码超过300分行的(加2分)
    • 一周提交次数少于20次的不加分

6 其他加分: - 周五前发博客的加1分 - 感想,体会不假大空的加1分 - 排版精美的加一分 - 进度条中记录学习时间与改进情况的加1分 - 有动手写新代码的加1分 - 课后选择题有验证的加1分 - 代码Commit Message规范的加1分 - 错题学习深入的加1分 7 扣分: - 有抄袭的扣至0分 - 代码作弊的扣至0分

点评模板:

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

    • 正确使用Markdown语法
    • 模板中的要素齐全
    • 教材学习中的问题和解决过程, 一个问题加1分,一共俩
    • 代码调试中的问题和解决过程, 一个问题加1分,一共俩
    • 本周有效代码超过300分行的(加2分)
    • 感想,体会不假大空的加1分
    • 有动手写新代码的加1分
    • 代码Commit Message规范的加1分
    • 课后选择题有验证的加1分

就这10分,还是根本不够加的~~~

点评过的同学博客和代码

20155304

20155301

20155315

20155220

20155219

学习进度条

             | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|

  --------   | :----------------:|:----------------:|:---------------:  |:-----:|

| 目标        | 5000行            |   30篇           | 400小时            |       |

| 第一周      | 200/200           |   2/2            | 20/20             |       |

| 第二周      | 300/500           |   2/4            | 18/38             |       |

| 第三周      | 500/1000          |   3/7            | 22/60             |       |

| 第四周      | 800/1300          |   4/9            | 30/90             |       |

| 第五周      | 1800/2000         |   5/9            | 45/100            |       |

| 第六周      | 2400/3000         |   6/10           | 60/100            |       |

| 第七周      | 3100/4000         |   7/11           | 75/100            |       |

| 第八周      | 3700/4500         |   8/12           | 90/110            |       |

| 第九周      | 4300/5000         |   9/12           | 105/130           |       |

| 第十周      | 4800/5000         |   10/10          | 120/145           |       |

参考:软件工程软件的估计为什么这么难软件工程 估计方法

参考资料

时间: 2024-10-09 21:35:50

## 20155336 2016-2017-2《JAVA程序设计》第十周学习总结的相关文章

20155336 2016-2017-2《JAVA程序设计》第二周学习总结

20155336 2016-2017-2 <JAVA 程序设计>第二周学习总结 教材学习内容 1: GIT版本检测 2: JAVA中基本类型 整数 字节 浮点数 字符 布尔(▲) 通过API可以得知各个类型可存储的数值范围 public class Range {public static void main(String[] args){ //byte.short.int.long的范围 System.out.printf("%d~%d%n", Byte.MIN_VALU

20145311 《Java程序设计》第九周学习总结

20145311 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 16.1JDBC 16.1.1JDBC简介 JDBC(Java DataBase Connectivity)是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无须接触底层数据库驱动程序的差异性. 厂商在操作JDBC驱动程序时,依方式可将驱动程序分为4种类型: ·Type 1:JDBC-ODBC Bridge Driver·Type 2:Native API

20165329 《Java程序设计》第九周学习总结

20165329 <Java程序设计>第九周学习总结 教材学习内容总结 第十二章 URL类 构造方法1 try { URL url = new URL("http://www.google.com"); } catch(MalformedURLException e) { System.out.println("Bad URL:"+url); } 构造方法2:用public URL(String protocol,String host,String f

20145201 《Java程序设计》第一周学习总结

# 20145201 <Java程序设计>第一周学习总结 ## 教材学习内容总结 万事开头难,终于开始学习了Java.寒假的时候看到老师的要求确实有点慌,但是这周翻开书,从书本知识第一行学起,发现并不是自己想想中那么难,只要一步一个脚印,每周有自己的计划,并按照计划按部就班的完成,最后一定会拥有自己的小成果的. 1.1Java不只是语言 Java经过多年的版本更新后,最新的版本是Java SE8. 在java发展的过程中,它的应用领域越来越广,根据不同级别的应用开发区分了不同的应用版本,最终j

20145326蔡馨熠《Java程序设计》第一周学习总结

20145326蔡馨熠 <Java程序设计>第一周学习总结 教材学习内容总结 转眼间新的一学期终于开始了!为什么我这么期待呢?因为这学期可以上娄嘉鹏老师的java程序设计课,我不是什么电脑天才,之前c语言学得也不是特别好.可我就是对hdl和java特别感兴趣(之前在我的问卷调查报告里面提到过),并且寒假的时候在家里也预习了一部分java知识.第一周要求学习两个章节并作心得体会,虽然我早已看过前两章的知识,不过为了进一步巩固,我还是用了星期六一天的时间把第一章和第二章的知识从头到尾仔仔细细的看了

20145224-陈颢文 《Java程序设计》第一周学习总结

20145224 <Java程序设计>第一周学习总结 教材学习内容总结 通过第一周的学习让我对Java有了个初步的了解,知道了Java分为Java SE.Java EE.Java ME三大平台,其中Java SE是基础.Java的一大特点是它可以跨平台,而JVM对Java的跨平台提供了支持,它就类似于一个虚拟机,只要在当前平台安装了相应的JVM,Java程序就有了可以在此平台上运行的基础啦.JRE是Java的执行环境,在安装了JRE的计算机上就可以运行Java的程序了,当然光是可以跑代码对于程

20155335 俞昆 2016-2017-2 《Java程序设计》第九周学习总结

学号 2016-2017-2 <Java程序设计>第九周学习总结 ##JDBC入门 在正式介绍JDBC前,已知JDBC是用来执行SQL的解决方案,开发人员使用JDBC的标准接口,开发人员不需接触底层数据库驱动程序的差异性. 本章,我们需要了解JDBC与API使用和概念,我们先要认识应用程序如何与数据库进行沟通,数据库本身是一种独立运行的应用程旭,程序员撰写的应用程序是利用通信协议对数据库进行指令交换,以进行数据的增加删除以及查找. 通常应用程序会利用一组专门与数据库进行通信协议的链接库,以简化

20145326《Java程序设计》第二周学习总结

20145326<Java程序设计>第二周学习总结 教材学习内容总结 本周学习教材第三章,本章主要讲述了java语言中的一些基础语法,java是个支持面向对象的程序语言,但在正式进入面向对象支持语法的探讨前,对于类型.变量.运算符.流程控制等,这些各种程序语言都会有的基本语法元素,还是要有一定的基础.虽然各种程序语言都有这些基本语法元素,但千万别因此而轻忽它们,因为各种程序语言都有其诞生的宗旨与演化过程,对这些基本语法元素,也就会有其独有的特性. 1. 类型 在java的世界中,并非每个东西都

20145201 《Java程序设计》第一周学习总结(修改)

# 20145201 <Java程序设计>第一周学习总结 ## 教材学习内容总结 万事开头难,终于开始学习了Java.寒假的时候看到老师的要求确实有点慌,但是这周翻开书,从书本知识第一行学起,发现并不是自己想想中那么难,只要一步一个脚印,每周有自己的计划,并按照计划按部就班的完成,最后一定会拥有自己的小成果的. 1.1Java不只是语言 Java经过多年的版本更新后,最新的版本是Java SE8. 在java发展的过程中,它的应用领域越来越广,根据不同级别的应用开发区分了不同的应用版本,最终j

20145238-荆玉茗 《Java程序设计》第一周学习总结

20145238 <Java程序设计>第一周学习总结 教材学习内容总结 Java三大平台:由于java领域的应用越来越广,根据不同级别的应用开发区分了不同的应用版本,后正式更名为Java SE,Java EE,Java ME. Java SE主要分为四个部分:JVM,JRE,JDK和JAVA语言. 了解JCP与JSR.RI.TCK的关系:JSR必须经过JCP投票通过才能成为最终的标准文件,JSR成为最终文件后对其成果做出免费且开发原始码的参考实现,称为RI,由TCK作为技术兼容测试工具箱. 了