教材内容学习
13.1UPL类
URL类是java.net包中有关重要的类,使用URL创建对象的应用程序称为客户端程序
1、UPL构造方法
URL类通常使用如下构造方法创建一个URL对象:
public URL(String spec)throws MalformedURLException
2、读取URL中的资源
URL对象调用InputStream openStream()方法可以返回一个输入流,该输入流指向URL对象包含的资源。通过该入流可以将服务器上的资源信息读入客户端
13.2InetAddress类
1、地址的表示
(1)域名
例如:www.tsinghua.edu.cn
(2)IP地址
例如:202.108.35.210
2、获取地址
(1)获取Internet上主机的地址
可以使用IneAddrss类的静态方法getByName(String s)将一个域名或IP地址传递给该方法的参数s,获得一个InetAddress对象,该对象含有主机地址的域名和IP地址
InetAddress类中还有两个实例方法:
①public String getHostName()获取InetAddress对象所含的域名
②public String getHostAddress()获取InetAddress对象所含的IP地址
(2)获取本地机的地址
可以使用InetAddress类的静态方法getLocalHost()获得一个InetAddress对象,该对象含有本地机器的域名和IP地址
13.3套接字
1、套接字概述
网络通信使用IP地址标识Internet上的计算机,使用端口号标识服务器上的进程(程序)
当两个程序需要通信时,他们可以通过使用Socket类建立套接字对象并连接在一起
2、客户端套接字
客户端程序使用Socket类建立放着连接带服务器的套接字对象
当套接字对象clientSocket建立后,clientSocket可以使用方法getInputStream()获得一个输入流,使用getOnputStream()获得一个输出流
3、ServerSocket对象与服务器端套接字
为了能使客户连接到服务器,服务器必须建立一个ServerSocket对象,该对象通过将客户端的套接字对象和服务器端的一个套接字对象连接起来
ServerSocket的构造方法是ServerSocket(int port),port是一个端口号。port必须和客户呼叫的端口号相同
当服务器的ServerSocket对象serverForClient建立后,就可以使用方法accept()将客户端的套接字和服务器端的套接字连接起来,代码如下:
try{Socket sc=serverForClient.accept();
}
catch(IOException){}
注:accept方法会阻塞线程的执行,知道接收到客户的呼叫
建立连接后,服务器端的套接字对象调用getInetAddress()方法可以获取一个InetAddress对象,该对象含有客户端的IP地址和域名,同样客户端的套接字对象调用getInetAddress()方法可以获取一个InetAddress对象,该对象含有客户端的IP地址和域名
4、使用多线程技术
可以使用Socket类的不带参数的构造方法Socket()创建一个套接字对象,该对象再调用public void connect(SocketAddress endpoint)throw IOEception请求和参数SocketAddress指定地址的服务器端的套接字建立连接
在套接字通信中,有两个基本原则:
①服务器应当启动一个专门的线程,在该线程中和客户的套接字建立连接
②由于套接字的输入流在读取信息时可能发生阻塞,客户端和服务器端都需要在一个单独的线程中读取信息
13.4UDP数据报
基于UDP的通信和基于TCP的通信不同,基于UDP的信息传递更快,但不提供可靠性保证
基于UDP的通信模式
①将数据打包,称为数据包,然后将数据包发往目的地
②接收发来的数据包,然后查看数据包的内容
1、发送数据包
用DatagramPacket类将数据打包,即用DatagramPacket类创建一个对象,称为数据包
使用该方法的创建的数据对象具有下列两个性质:
①含有data数组指定的数据
②该数据包将发送到地址是address,端口号是port的主机上
用DatagramPacket类不带参数的构造方法DatagramPacket()创建一个对象,该对象负责发送数据包
2、接收数据包
首先用DatagramPacket的另一个构造方法DatagramPacket(int port)创建一个对象,其中的参数必须和待接收的数据包的端口号相同
然后对象使用方法receive(DatagramPacket pack)接收数据包
13.6Java远程调用
Java远程调用是一种分布式技术
1、远程对象及代理
(1)远程对象
驻留在服务器上的对象是客户要请求得到对象,称作远程对象
(2)代理与存根
代理的特点是:它与远程对象实现相同的接口
存根:是一种特殊的字节码,并让这个存根产生的对象作为远程对象的代理
(3)Remote接口
RMI为了标识一个对象是远程对象,即可以被客户请求的对象,要求远程对象必须实现java.rmi包中的Remote接口,也就是说只有实现该接口的类实例才被RMI认为是一个远程对象
2、RMI的设计细节
(1)扩展Remote接口
定义一个接口是java.rmi包中Remote的子接口,即扩展Remote接口
(2)远程对象
创建远程对象的类必须要实现Remote接口,RMI申通Remote接口来标识远程对象
(3)存根与代理
RMI负责产生存根,如果穿远程对象的字节码是RemoteConcrete Subject.class那么存根的字节码是RemoteConcrete Subject_Stub.class
(4)启动注册:rmiregistry
在远程服务器创建远程对象之前,RMI要求远程服务器必须首先启动注册rmiregistry
(5)启动远程对象服务
(6)运行客户端程序
14.1绘制基本图形
1、直线
使用java.awt.geom包中的Line2D的静态内部类Double
new Line2D.Double(double x1,double x2,double y1,double y2);
创建起点为(x1,y1),终点为(x2,y2)的直线
2、矩形
使用Rectangle2D.Double类
new Rectangle2D.Double(double x,double y,double w,double h);
创建于该左上角坐标是(x,y),宽是w,高是h的矩形对象
3、圆角矩形
使用RoundRectangle2D.Double类
new RoundRectangle2D.Double(double x,double y,double w,double h,double arcw,double arch);
创建左上角坐标是(x,y),宽是w,高是h,圆角的长轴和短轴分别是arcw和arch的矩形对象
4、椭圆
使用Ellipse2D.Double类
new Ellipse2D.Double(double x,double y,double w,double h)
创建一个外接矩形的左上角坐标是(x,y),宽是w,高是h的椭圆对象
14.2变换图形
有时需要平移、缩放或旋转一个图形,可以使用AffineTranform类来实现对图形的这些操作
首先使用AffineTransform类创建一个对象:
AffineTransform trans=new AffineTransform();
对象trans使用下列3个方法来实现对图形的变换操作
①translate(double 啊,doubleb)将图形在x轴方向移动a个像素单位,a是正值时向右移动,是负值时向左移动;y轴方向移动b个像素单位,b是正值时向右移动,是负值时向左移动
②scale(double a,double b)将图形在x轴方向缩放a倍,y轴方向缩放b倍
③rotate(double number,double x,double y)将图形沿顺时针或逆时针方向以(x,y)为轴转动number个弧度
14.3图形的布尔运算
假设T1、T2是两个图形
T1和T2的布尔“与”(AND)运算的结果是两个图形的重叠部分
T1和T2的布尔“或”(OR)运算的结果是两个图形的合并
T1和T2的布尔“差”(NOT)运算的结果是T1去掉T1和T2的重叠部分
T1和T2的布尔“异或:(XOR)运算的结果是两个图形的非重叠部分
14.5绘制图像
可以首先使用Icon类的子类ImageIcon创建封装cat.jpg图形文件的IconImage对象
Icon icon=new ImageIcon(”cat.jpeg“);
然后让按钮组件button调用方法设置其上的图像(即显示图像)
button.setIcon(icon);
除了上述方法还可以使用Graphics绘制图像步骤如下
(1)加载图像
Tollkit类的对象调用方法Image getImage(String fileName)或Image getImage(File file),可以返回一个Image对象,该对象封装参数file(或参数fileName)指定的图像文件
(2)绘制图像
图像被加载后,即被封装到Image实例中后,就可以在paint方法中绘制它了。Graphics;诶提供了几个名为drawImage的方法用于绘制图像
14.6播放音频
播放音频的步骤如下
(1)创建File对象
File musicFile=new File(“hello.wav”);
(2)回去URI对象(URI类属于java.net包)
URI uri=musicFile.toURI();
(3)获取URL对象
URL url=uri.toURL();
(4)创建音频对象
AudioClip clip=Applet.newAudioClip();
(5)播放、循环与停止
clip.play() 开始播放
clip.loop() 循环播放
clip.stop() 停止播放
教材学习中遇到的问题
无
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第二周 | 100/1080 | 1/12 | 15/116 | java网络编程 图形、图形和音频的编辑 |