学号 2017-2018-2 《Java程序设计》第九周学习总结
教材学习内容总结
- 13.1 URL类:URL类是java.net包中的一个类,用URL建立的对象能够获取URL中的资,其包括三部分信息:协议、地址和资源。注意,协议必须被Java虚拟机所支持,地址必须是能连接的IP地址或域名。
- URL类有两个构造方法来建立URL对象:①
public URL [连接名] throws MalformedURLException
;②public URL([协议],[地址],[资源]) throws Exception
- URL对象调用InputStream()方法返回一个指向对象包含的资源的输入流,能够用来读取信息。
- 13.2 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地址。
- 13.3 套接字: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)
来得到。套接字通讯的两个基本原则:
- ①服务器要启动一个专门的线程与客户的套接字创建链接;
- ②套接字的输入流在读取信息时可能发生阻塞,因此客户端与服务器端都须要在一个单独的线程中读取信息。
- 13.4 UDP数据报
- 比较UDP协议与TCP协议:UDP速度较快,但没法保证可否送到目的地且没法保证送达时的顺序。
- 数据包的发送与接收:使用DatagramPacked类的构造方法
DatagramPacket([字节数组],[长度],[地址],[端口])
建立数据包对象,使用DatagramSocket类建立的对象调用send([数据包])
方法来发送数据包。要接收数据包以前,首先要用使用DatagramSocket类建立的对象,调用构造方法DatagramSocket(端口号)
与被发送的数据包建立链接,而后这个建立的对象调用receive([数据包])
方法来接收数据包,其中数据包对象能够用DatagramSocket类获得构造方法DatagramPacket([字节数组],[长度])
来建立数据包对象。
- 注意事项:receive方法可能引发阻塞,直到收到数据包,且数据包的长度不能超过8192KB
- 13.5 广播数据报
- 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类地址并不表明某个特定主机的位置。
- 13.6 Java远程调用
- 远程调用的基本步骤是:客户程序请求远程对象调用方法,而后远程对象调用方法并返回必要的结果。
- 代理与存根:RMI会生成一个存根(Stub)(使用rmic命令来产生。),并让存根产生的对象做为远程对象的代理(存根的命名为[字节码文件_Stub].java)。代理与远程对象实现了相同的接口。客户端平时是跟代理打交道。
- RMI为标志远程对象,实现了java.rmi包中的Remote接口,注意必须扩展这个接口,同时远程对象的类必需要实现Remote接口。
- 远程对象建立以前,RMI要求远程服务器必须先启动注册rmiregistry。而后远程服务器使用java.rmi包中的Naming类调用类方法
rebind(String name.Remote obj)
绑定一个远程对象到rmiregistry所管理的注册表中。
教材学习中的问题和解决过程
在本章的学习中,因为跟着教材走,遇到不懂的内容也及时往回翻书看懂,因此基本上没有什么大问题。html
- 问题1:在学到Java远程调用的时候,我在想:咱们平时生活中的一些通讯也是经过这样来实现的吗?用的也是Java语言吗?虽然了解了这些内容的原理,可是仍是想知道,到底是如何把这些东西实现到实处的?
代码调试中的问题和解决过程

上周考试错题总结
结对及互评
其余
这周的学习任务感受比较抽象一些,不过我以为本周学的内容应该是和咱们的生活比较接近了,我了解了像“聊天室”,“广播台”这种平时常见的东西的原理,收获仍是很大的~
不过感受有点遗憾的是四则运算的多种语言尚未弄好。。发觉本身这几天有点偷懒了。应该及时调整一下状态。
补充~后来仍是完成了四则运算的多种语言,略微开心学习
学习进度条
目标 |
5000行 |
30篇 |
400小时 |
第一周 |
36/36 |
1/1 |
8/8 |
第二周 |
432/468 |
2/3 |
15/23 |
第三周 |
964/1432 |
1/4 |
16/39 |
第四周 |
725/2157 |
1/5 |
14/53 |
第五周 |
1428/3585 |
3/8 |
18/71 |
第六周 |
1323/4908 |
1/9 |
17/88 |
第七周 |
960/5868 |
3/12 |
22/110 |
第八周 |
993/6861 |
2/14 |
23/133 |
第九周 |
2073/8934 |
2/16 |
20/153 |
计划学习时间:18小时.net
实际学习时间:20小时线程