zoukankan      html  css  js  c++  java
  • 20175314 《Java程序设计》第十一周学习总结

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

    教材学习内容总结

    URL类

    • URL类是java.net包中的一个类,用URL创建的对象可以获取URL中的资,其包括三部分信息:协议、地址和资源。注意,协议必须被Java虚拟机所支持,地址必须是能链接的IP地址或域名
    • URL类有两个构造方法来创建URL对象:①public URL [链接名] throws MalformedURLExceptionpublic URL([协议],[地址],[资源]) throws Exception
    • URL对象调用InputStream()方法返回一个指向对象包含的资源的输入流,可以用来读取信息

    InetAddress类

    • Internet上的主机有两种方式来表示地址:
      ①地址(如www.***.com)
      ②IP地址(如202.
      ),InetAdress类对象含有一个Internet主机地址的域名和IP地址
      域名服务器(DNS)负责将域名转化为IP地址,然后与主机建立连接
    • InetAdress类的两个静态方法:
      getByName(String s),其中s是域名或者IP地址,调用此方法可以获得InetAdress对象,含有主机地址的域名与IP地址,表示信息的格式为[域名]/[IP地址]
      getLocalHost()获得一个InetAdress对象,该对象还有本地机器的域名和IP地址
      同时,IntAdress类中还有两个实例方法:
      public String getHostName()获取对象所含的域名
      public String getHostAdress()获取对象所含的IP地址
    • 套接字:IP地址表示计算机,端口号表示进程(线程),Socket类创建套接字对象并连接在一起(端口号与IP地址组合)
    • 客户端程序用Socket类创建负责连接到服务器的套接字对象,其构造方法为Socket([IP地址],[端口号])(可能抛出IOException异常)
      对套接字对象建立后,可以使用
      getInputStream()获得一个输入流来读取服务器写入到输出流中的数据
      getOutputStream()获得一个输出流,服务器可以用输入流来读取客户写入到输出流中的数据
    • 客户负责建立连接到服务器的套接字对象。服务器需要创建一个ServerSocket对象来将客户端的套接字对象与服务器的套接字对象连接起来。ServerSocket的构造方法是ServerSocket([端口号])(当端口已被占用会抛出IOException异常)。接着,ServerSocket对象调用accept()方法再次- 返回一个与客户端对象相连接的新的Socket对象。同样的,它也具有上述的两个方法
    • 从套接字连接中读取数据,可能在另一端数据发送之前就已经开始读取了,而且会阻塞本线程,直到成功读取到信息。同时,accept方法也会阻塞线程的执行,直到收到客户的呼叫。为解决“收不到呼叫而导致程序无法继续运行”的情况,ServerSocket对象在调用accept方法之前可以先调用setTimeout(s)方法来使得在调用accept方法时如果超过s毫秒没有收到呼叫,就抛出SocketTimeoutException异常
    • 双方通信完毕,套接字要使用close()方法关闭套接字连接
    • 使用多线程技术:由于使用套接字连接中读取数据时,可能会阻塞本线程直到成功读取到信息。为了避免这种情况,需要启动一个专门为该客户服务的线程。Socket的构造方法Socket()可以创建一个套接字对象,该对象调用public void connect(SocketAddress endpoint) throws - IOException来与指定的套接字创建连接。参数可以使用InetSocketAddress的构造方法public InetSocketAdress(InetAdress addr,int port)来获得。套接字通信的两个基本原则:
      ①服务器要启动一个专门的线程与客户的套接字建立连接
      ②套接字的输入流在读取信息时可能发生阻塞,所以客户端与服务器端都需要在一个单独的线程中读取信息

    UDP数据报

    比较UDP协议与TCP协议:UDP速度较快,但无法保证能否送到目的地且无法保证送达时的顺序
    数据包的发送与接收:使用DatagramPacked类的构造方法DatagramPacket([字节数组],[长度],[地址],[端口])创建数据包对象,使用DatagramSocket类创建的对象调用send([数据包])方法来发送数据包。要接收数据包之前,首先要用使用DatagramSocket类创建的对象,调用构造方法DatagramSocket(端口号)与被发送的数据包创建连接,然后这个创建的对象调用receive([数据包])方法来接收数据包,其中数据包对象可以用DatagramSocket类得到构造方法DatagramPacket([字节数组],[长度])来创建数据包对象

    广播数据报

    • Internet的地址是a.b.c.d的形式,计算机地址分为四大类:
      ①A类:a<128,则a表示网络地址,b,c,d表示主机地址
      ②B类:128<=a<192,则a,b表示网络地址,c,d表示主机地址
      ③B类:192<=a则a,b,c表示网络地址,d表示主机地址
      ④B类:224.0.0.0~224.255.255.255是保留地址,称为D类地址
      要广播或者接收广播的主机都必须加入到同一个D类地址,注意D类地址并不代表某个特定主机的位置

    Java远程调用

    • 远程调用的基本步骤是:客户程序请求远程对象调用方法,然后远程对象调用方法并返回必要的结果
    • 代理与存根:RMI会生成一个存根(Stub)(使用rmic命令来产生。),并让存根产生的对象作为远程对象的代理(存根的命名为[字节码文件_Stub].java)。代理与远程对象实现了相同的接口。客户端平时是跟代理打交道
    • RMI为标志远程对象,实现了java.rmi包中的Remote接口,注意必须扩展这个接口,同时远程对象的类必须要实现Remote接口
    • 远程对象创建之前,RMI要求远程服务器必须先启动注册rmiregistry。然后远程服务器使用java.rmi包中的Naming类调用类方法rebind(String name.Remote obj)绑定一个远程对象到rmiregistry所管理的注册表中

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

    • 一个URL对象通常包含最基本的三部分信息:协议、地址、资源
    • URL对象调用InputStream openStream() 方法可以返回一个输入流,该输入流指向URL对象所包含的资源。通过该输入流可以将服务器上的资源信息读入到客户端
    • 客户端的套接字和服务器端的套接字通过输入、输出流互相连接后进行通信
    • 使用方法accept()accept()会返回一个和客户端Socket对象相连接的Socket对象。accept方法会堵塞线程的继续执行,直到接收到客户的呼叫
    • 套接字的意义:
      1、源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务
      2、套接字,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程
    • 课本关于URL的构造方法部分,地址为什么写对了也可能发生异常?
    • 通过查询资料:由于网络不通,地址不合理,格式不正确等多种原因可导致发生异常

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

    • 一开始使用老师在蓝墨云发布的压缩包,解压一直发生错误,后来使用官网版本按照操作顺序,
    • 但是在执行gmssl命令行工具检查是否成功时遇到问题

    • 安装gcc后成功完成任务



    代码托管

    本周考试错题

    • 下列说法正确的是
      A . Java语言的一大特性就是内置对多线程的支持。
      B . main方法返回时,JVM就会结束Java应用程序。
      C . Java应用程序中第一个线程结束后,JVM结束Java应用程序。
      D . Java语言使用Thread类及其子类对象来表示线程。
      正确答案: A B D
      解析:课本P360-361

    心得体会

    本周是最后一次学习总结,说起来漫长但是也短暂的Java学习即将在最后的两次实验结束后落下帷幕,但是编程的学习永远不会结束,只有终身学习,紧跟时代大趋势,才能够实现我们想要的结果,同时我希望未来的学习能够更能够应用于实际生活使用当中

    学习进度条

    代码行数 博客量 学习时间 重要成长
    目标 5000行 16篇 320小时
    第一周 51/100 1/1 12/20 基本掌握了Linux的简单指令
    第二周 173/200 1/1 18/20 学习了Java重要基本语法
    第三周 672/800 1/1 18/20 学习了包含多个类的Java程序及类的包机制
    第四周 436/600 1/1 12/20 学习程序父类和子类的继承规则
    第五周 573/600 1/1 10/20 学习通过类来实现接口和接口回调
    第六周 1182/1200 1/1 20/20 学习内部类、匿名类、异常类和File类
    第七周 491/600 1/1 14/20 学习了Java的常用实用类
    第八周 1302/1500 4/4 22/25 学习了Java的泛型类和单元测试的方法
    第九周 624/800 3/3 18/20 学习使用MySQL数据库服务器
    第十周 799/800 5/5 20/20 学习应用Java多线程机制
    第十一周 856/1000 3/3 18/20 学习服务器与客户端重要类
  • 相关阅读:
    《应用Yii1.1和PHP5进行敏捷Web开发》学习笔记(转)
    YII 小模块功能
    Netbeans代码配色主题大搜集
    opensuse 启动巨慢 解决方法 90s多
    opensuse 安装 网易云音乐 rpm netease music
    linux qq rpm deb opensuse
    openSUSE 安装 alien
    第一行代码 Android 第2版
    Android Studio AVD 虚拟机 联网 失败
    docker error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.29/containers/json: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuratio
  • 原文地址:https://www.cnblogs.com/SANFENs/p/10851388.html
Copyright © 2011-2022 走看看