《JAVA程序设计》_第十一周学习总结
一、学习内容
13.1 URL类
URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符,使用URL创建对象的应用程序称作客户端程序。
一个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//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方法会阻塞线程的执行,直到接收到客户的呼叫。
套接字通信基本原则:服务器应当启动一个专门的线程,在该线程中和客户的套接字建立连接。由于套接字的输入流在读取信息时可能发生阻塞,客户端和服务器端都需要在一个单独的线程中读取信息。




13.4 UDP数据报
套接字是基于TCP协议的网络通信。
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
- 启动远程对象服务
- 运行客户端程序
二、本周学习过程遇到的问题及总结
问题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地址

连接成功~

三、学习总结
- 本周的内容是网络编程,因为之前有一定的计网基础,所以理解起来不算太困难,书上的例子运行起来也没什么问题,但对网络编程的理解还是不够,对其应用也知之甚少,之后会对其进行巩固。
- 码云链接
《JAVA程序设计》_第十一周学习总结的更多相关文章
- 201521123061 《Java程序设计》第十一周学习总结
201521123061 <Java程序设计>第十一周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 本周学习的是如何解决多线程访问中的互斥 ...
- 201521123072《java程序设计》第十一周学习总结
201521123072<java程序设计>第十一周学习总结 1. 本周学习总结 2. 书面作业 本次PTA作业题集多线程 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问 ...
- 201521123038 《Java程序设计》 第十一周学习总结
201521123038 <Java程序设计> 第十一周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多 ...
- 20172325 2017-2018-2 《Java程序设计》第十一周学习总结
20172325 2017-2018-2 <Java程序设计>第十一周学习总结 教材学习内容总结 Android简介 Android操作系统是一种多用户的Linux系统,每个应用程序作为单 ...
- 201621123080《Java程序设计》第十一周学习总结
201621123080<Java程序设计>第十一周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 ...
- 20175227张雪莹 2018-2019-2 《Java程序设计》第十一周学习总结
20175227张雪莹 2018-2019-2 <Java程序设计>第十一周学习总结 教材学习内容总结 第十三章 Java网络编程 URL类 一个URL对象通常包含最基本的三部分信息:协议 ...
- 《Java程序设计》第十一周学习总结
20175334 <Java程序设计>第十一周学习总结 教材学习内容总结 第十三章 URL类 一个URL对象通常包含最基本的三部分信息:协议.地址.资源. URL对象调用 InputStr ...
- 20175314 《Java程序设计》第十一周学习总结
20175314 <Java程序设计>第十一周学习总结 教材学习内容总结 URL类 URL类是java.net包中的一个类,用URL创建的对象可以获取URL中的资,其包括三部分信息:协议. ...
- 201521123122 《java程序设计》第十一周学习总结
## 201521123122 <java程序设计>第十一周实验总结 ## 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 其实这周也没讲多少内容,所 ...
- 20172330 2017-2018-1 《Java程序设计》第十一周学习总结
20172330 2017-2018-1 <程序设计与数据结构>第十一周学习总结 教材学习内容总结 本周的学习内容为集合 Android简介 Android操作系统是一种多用户的Linux ...
随机推荐
- Java自学-面向对象 属性
Java类的属性 一个英雄有姓名,血量,护甲等等状态 这些状态就叫做一个类的属性 步骤 1 : 属性的类型 属性的类型可以是基本类型,比如int整数,float 浮点数 也可以是类类型,比如Strin ...
- 【JVM学习笔记二】垃圾收集器与内存分配策略
1. 概述 1) GC的历史比Java久远 2) GC需要完成的三件事: | 哪些内存需要回收 | 什么时候回收 | 如何回收 3) Java内存运行时区域各个部分: | Java虚拟机栈.计数器.本 ...
- Eureka设计原理
1. Eureka设计原理 1.1. 前言 目前我越来越关注技术原理层面的东西,开始考虑中间件设计背后,要考虑哪些因素,为什么要这样设计,有什么优化的地方,这次来讨论Eureka 1.2. 设计问题 ...
- 浏览器标签页切换时jquery动画的问题
最近公司在做大屏设备上的页面,其中动画的部分居多,开始的时候是用的jquery做的动画,在做完后无意中发现jquery动画存在一个问题,就是浏览器在切换标签页后,过段时间切换回来页面中的动画会出现连续 ...
- 2. vue基础-vue-cli(vue脚手架)
1. 作用 快速创建一个基于webpack模板的项目 2. 安装工具 安装webpack:使用npm全局安装webpack,打开命令行工具,输入 npm install webpack -g,安装 ...
- Dalvik虚拟机结构——1
Dalvik核心内容:libdvm.so 主要有C语言实现,依赖于Linux内核的一部分功能:线程机制,内存管理机制,每一个Android应有都对应一个dalvik实例 Dalvik虚拟机功能:主要 ...
- WDA演练二:主界面设计(一)
前面已经完成了登陆界面的开发,下面就是主页面的展示了. 一.新建菜单表: 这里说明一下,考虑到简单点,这里只用了两级菜单展示,表里在配置的时候也指挥有一级,二级. AUGRP对应前面用户表的GROUP ...
- angular8 配置 测试环境打包指令 生成测试环境包指令
1.angular.json 文件中在architect 下添加 buildTest指令 距离位置 projects => (你的项目名称) => architect 下和 build 指 ...
- k8s的常用命令(一)
常用的kubectl命令 kubectl run kubia --image=luksa/kubia --port=8080 --generator=run/v1 --image 指定镜像 - ...
- Beta冲刺第3次
一.团队成员的学号姓名列表 学号 姓名 201731103226 翟仕佶 201731062517 曾中杰 201731062424 杨模 201731062632 邓高虎 201731062624 ...