20165330 2017-2018-2 《Java程序设计》第9周学习总结

课本知识总结

第十三章 Java网络编程

  1. URL类
  • URL类是java.net包中的一个重要的类
  • 一个URL对象包含的三个基本信息:协议、地址和资源
    • 协议:必须是URL对象所在的Java虚拟机支持的协议,经常使用的有:Http、Ftp、File协议,由参数protocol指定
    • 地址:必须是能链接的有效IP地址或域名,由参数host指定
    • 资源:能够是主机上的任何一个文件,由参数file指定
  • 构造方法
    • public URL (String spec) throws MalformedURLException
    • public URL(String protocol,String host,String file) throws MalformedURLException
  • 调用InputStream openStream()方法返回一个输入流
  1. InetAddress类
  • Internet上主机表示地址的两种方式
    • 域名
    • IP地址
  • 获取地址
    • 获取Internet上主机地址:getByName(String s)
    • 获取本地机地址:getLocalHost()
  1. 套接字
  • 是基于TCP协议的网络通讯
  • 客户端套接字
    • 对象创建方法:使用Socket类
    • Socket构造方法:Socket(String host,int port)
  • ServerSocket对象与服务器端套接字
    • 构造方法:ServerSocket(int port)
  • 使用方法accept()将客户端的套接字和服务器端的套接字链接起来
try{ Socket sc = serverForClient.accept();
}
catch(IOException e) {}
  • 通讯完毕后,套接字使用close()方法关闭套接字链接
  • 多线程技术
    • 服务器端收到一个客户端的套接字时,就会启动一个专门为该客户服务的线程
  • 套接字通讯基本原则
    • 服务器应当启动一个专门的线程,在该线程中和客户的套接字创建链接
    • 因为套接字的输入流在读取信息时可能发生阻塞,客户端和服务器端都须要在一个单独的线程中读取信息
  1. UPD数据报
  • 基于UPD通讯的基本模式
    • 将数据打包发往目的地
    • 接收发来的数据包并查看内容
  • 发送数据包
    • 打包:使用DatagramPacket类
DatagramPacket(byte data[],int length,InetAddtress address,int port)
DatagramPack(byte data[],int offset,int length,InetAddtress address,int port)
  • 发送:使用构造方法DatagramSocket()建立一个对象
  • 接收数据包
    • 使用构造方法DatagramSocket(int port)建立一个对象
    • 使用方法receive(DatagramPacket pack)接收数据包
  1. 广播数据报
  • A类地址:a<128,则b.c.d表示主机
  • B类地址:128<=a<192,则a.b表示网络地址,c.d表示主机地址
  • C类地址:a>=192,a.b.c表示网络地址,d表示主机地址
  • D类地址:224.0.0.0~224.255.255.255是保留地址
  • 要广播或接收广播的主机都必须加入到同一个D类地址
  1. RMI是一种分布式技术,使用RMI能够让一个虚拟机(JVM)上的应用程序请求调用位于网络上另外一处JVM上的对象方法

遇到的问题及解决方法

  • 在运行本章第一个代码时出现imagejava

    解决方法:将两个程序分别打包在同一文件夹下,经过输入javac -encoding gbk Example13_1.java,而后成功编译并运行。编程

代码托管

image

上周错题总结

  1. image

    解析:image服务器

  2. image

    解析:当main方法中没有建立其余的线程,main方法返回时,JVM就会结束Java应用程序;当main方法中建立了其余线程,要等到全部线程都结束,JVM才会结束Java应用程序网络

  3. image

    解析:C项:先前的实体会成为“垃圾”,而且不会被垃圾收集器收集。D项:当线程进入死亡状态后,线程就还能够调用isAlive()方法,而且返回值为false。多线程

相关文章
相关标签/搜索