《JAVA程序设计》_第十一周学习总结

1、学习内容

13.1 URL类

  • URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符,使用URL建立对象的应用程序称做客户端程序。java

  • 一个URL对象包含的三个基本信息:协议、地址和资源。
    • 协议:必须是URL对象所在的Java虚拟机支持的协议,经常使用的有:Http、Ftp、File协议,由参数protocol指定。
    • 地址:必须是能链接的有效IP地址或域名,由参数host指定。
    • 资源:能够是主机上的任何一个文件,由参数file指定。
  • 构造方法git

public URL (String spec) throws MalformedURLException//所包含的资源位默认的资源(主页)
public URL(String protocol,String host,String file) throws MalformedURLException//protocol指定协议,host指定地址,file指定资源
  • 读取URL中的资源:调用InputStream openStream()方法返回一个输入流。

13.2 InetAdress类

  • 地址的表示:域名和IP地址编程

  • 获取Internet上主机的地址:使用InetAddress类的静态方法getByName(String s)将一个域名或 IP 地址传递给该方法的参数 S,得到一个 InetAddress 对象;public String getHostName()获取InetAddress对象所含的域;public String getHostAddress()获取InetAddress对象所含的IP地址。
  • 获取本地机的地址:可使用InetAddress类的静态方法getLocalHost()得到一个InetAddress对象,该对象含有本地机的域名和IP地址。服务器

13.3 套接字

  • 当两个程序须要通讯时,它们能够经过使用Socket类创建套接字对象并链接在一块儿(端口号和IP地址的组合得出一个网络套接字)。网络

  • Socket类的构造方法:Socket(String host, int port),参数host是服务器的IP地址,port是端口号。分布式

//创建链接到服务器的套接字对象
try { Socket clientSocket = new Socket("http://192.168.0.78",2010);
}  //(IP,端口号)
catch(IOException e) {}
ServerSocket 的构造方法:
ServerSocket(int port)
//其中port 是一个端口号。
  • 可使用方法accept()将客户端的套接字和服务器端的套接字链接起来。
//创建ServerSocket对象
try{ ServerSocket serverForClient = new ServerSocket(2010);
}//(端口号)
catch(IOException e) {}


//使用accept()方法将客户端和服务器端套接字链接起来
try{ Socket sc = serverForClient.accept();
}
catch(IOException e) {}
  • 从套接字链接中读取数据与从文件中读取数据有着很大的不一样,从文件中读取数据时,全部的数据都已经在文件中了,而使用套接字链接时,可能在另外一端数据发送以前,就已经开始读取了。学习

  • 注意:accept方法会阻塞线程的执行,直到接收到客户的呼叫。测试

  • 套接字通讯基本原则:服务器应当启动一个专门的线程,在该线程中和客户的套接字创建链接。因为套接字的输入流在读取信息时可能发生阻塞,客户端和服务器端都须要在一个单独的线程中读取信息。url

13.4 UDP数据报

  • 套接字是基于TCP协议的网络通讯。.net

  • UDP的信息传递更快,但不提供可靠性保障,即没法知道数据可否正确到达目的地,也不能肯定数据到达目的地的顺序是否和发送的顺序相同。

  • 基于UDP通讯的基本模式:
    • 将数据打包,称为数据包(比如将信件装入信封同样),而后将数据包发往目的地。
    • 接受别人发来的数据包(比如接收信封同样),而后查看数据包中的内容。
    • 发送数据包
  • 用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)负责接收数据包。

13.5 广播数据报

  • 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类地址。

  • D类地址不是用来你表明位置的,即在网络上不能使用D类地址去查找计算机。

13.6 Java远程调用

  • RMI是一种分布式技术,使用RMI可让一个虚拟机上的应用程序请求调用位于网络上另外一处虚拟机上的对象。

  • 代理的特色是它与远程对象实现了相同的接口。

  • 存根是一种特殊的字节码,并让这个存根产生的对象做为远程对象的代理,其字节码后缀为"_Stub"。

  • 远程对象必须实现java.rmi包中的Remote接口。

  • 代理的特色是它与远程对象实现了相同的接口

  • RMI的设计细节
    • 扩展Remote接口
    • 建立远程对象
    • RMI使用rmic命令生成存根
    • 启动注册rimregistry
    • 启动远程对象服务
    • 运行客户端程序

2、本周学习过程遇到的问题及总结

问题1:课上测试的gmssl库的使用,我在安装配置时,出现了以下问题:

解决1:在终端输入

ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1
ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1

问题2:感受在一台机器上链接没什么用,尝试在两台电脑上使用套接字链接服务器

实现2:刚开始一直连不上,后来发现端口要设置成一个1024以上的自定义端口,ip要设置成对方电脑的ip4地址

链接成功~

3、学习总结

  • 本周的内容是网络编程,由于以前有必定的计网基础,因此理解起来不算太困难,书上的例子运行起来也没什么问题,但对网络编程的理解仍是不够,对其应用也知之甚少,以后会对其进行巩固。
  • 码云连接
相关文章
相关标签/搜索