收藏 分享(赏)

第9章 网络多媒体应用.doc

上传人:scg750829 文档编号:8137609 上传时间:2019-06-10 格式:DOC 页数:35 大小:377.50KB
下载 相关 举报
第9章 网络多媒体应用.doc_第1页
第1页 / 共35页
第9章 网络多媒体应用.doc_第2页
第2页 / 共35页
第9章 网络多媒体应用.doc_第3页
第3页 / 共35页
第9章 网络多媒体应用.doc_第4页
第4页 / 共35页
第9章 网络多媒体应用.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、1第九章 网络多媒体应用9.1 网络编程基础 (URL 编程和 Socket 编程)9.1.1 URL 编程URL (Uniform Resource Locator, 统一资源定位器) 用于表示 Internet 上资源的地址,即网络上数据的位置. 资源为文件,目录,对象的引用. 利用 URL 的表示和建立, Java 程序可直接读入网络上的数据,或把数据传送到网络的另一端. J 包定义了对应的 URL 类.其常用 4 个构造方法如下:(1) public URL(String spec); /这个构造方法用指定的 URL 来创建 URL 对象,参数为 URL 的 IP 地址和文件 如:tr

2、y URL u1=new URL (“http:/ catch(Malformed URLException e) .(2) public URL(URL context, String spec); /该构造方法用已存在的 URL 对象的 context 创建 URL 对象例如 :try URL u2=new URL (u1,welcome.html); catch(Malformed URLException e) .(3) public URL(String protocol, String host, String file); /该构造方法用指定的协议, 主机名, 路经及文件名创建的

3、 URL 对象例如:try URL u3=new URL (“http“, ““, “index.html“); catch(Malformed URLException e) .(4) public URL(String protocol, String host, int port, String file); /该构造方法用指定的协议, 主机名, 端口号, 文件路经及文件名创建的一个 URL 对象例如:try URL u3=new URL (“http“, ““, 8080, “index.html“); catch(Malformed URLException e) .使用 URL 类

4、的 openStream()方法可以连接和获取 URL 对象的内容(即返回一个输入流对象读 URL 数据)方法格式为:2public final InputStream openStream() throws IOExceptionURL 类的常用方法:public final Object getContent()-取的传输协义.public String getFile()-取的资源文件名.public String getHost()-取的主机名.public String getPort()-取的端口号.public String getProtocol()-取的传输协义.public

5、 String toString()-用于把 URL 转化为字符串.例: URL 编程读取 yahoo 站点地址的内容import java.io.*;import .*;class URLReaderpublic static void main(String args)try/用指定的 URL 来创建 URL 对象URL tirc = new URL(“http:/ /创建缓冲区输入流BufferedReader in = new BufferedReader(new InputStreamReader(tirc.openStream();String s; /接收数据的字符串变量 swh

6、ile(s = in.readLine()!=null)System.out.println(s);in.close(); /关闭 BufferedReader 输 入流.catch(MalformedURLException e) /捕捉 URL 缺陷异常System.out.println(e); /输出缺陷异常信息catch(IOException e) /捕捉 I/O 异常System.out.println(e);tirc.openStream() /用创建 URL 对象 tirc 的 openStream()方法建立到当前3URL(http:/)的连接并返回一个从该连接地址读取数据

7、的输入流对象InputStreamReader(InputStream in) /从字节流到字符流的 桥梁:它读取字节流并转为字符流. in 一个输 入流由 tirc.openStream()代表输入流,并用 new 创建字节流转为字符流对象BufferedReader(Reader in int sz) /构造方法参数 in阅读器, sz输入缓冲区大小.本例创建一个缓冲字符输入流对象, 用 in 引用它,输入缓冲区大小为默认.再调用它的读入行方法将字符流赋给(存入)变量 s 中,再输出字符流.9.1.2 Socket 编程套接字(Socket)是由伯克利大学首创的.它允许程序把网络连接当成一

8、个流,可以在这个流中读取字节. 包中定义的两个类 Socket (Client 端套接字) 和 ServerSocket (Server 端套接字),分别用 java 的流模型技术来实现客户端和服务器端或两台计算机之间的网络通信,当套接字连接建立后,也就是一条通信线路被建立起来了.Socket 通信模型如下图:4输入流客户端 Socket输出流输出流输入流服务器端 Socket互相连接互相连接套接字能执行 7 种基本操作:(1) 连接到远程计算机(2) 绑定到端口(3) 接收从远程计算机来的绑定端口上的连接(4) 监听到达的数据(5) 发送数据(6) 接收数据(7) 关闭连接.客户端:常用套

9、接字 Socket 类构造方法1. public Socket (String host, int port) throws unknownHostException , IOException /建立一个 IP 地址代表的服务器主机 host, 端口号为 port的套接字(01023 为通信口,一般用 102465535 口), 连接到服务器上,例如.Try Socket soc = new Socket(““ ,80); /发送数据(http:占用 80 口)catch(unknownHostException uex) catch(IOException e) 2. Socket 类常用

10、方法5(1) public InetAddress getInetAddress() /调用 Socket 对象的getInetAddress()方法,返回连接到远程主机的 IP 地址,如果连接失败,则返回以前连接的主机.例如:Try Socket soc = new Socket(““ ,80);InetAddress host = soc. getInetAddress(); catch(unknownHostException uex) catch(IOException e) (2) public int getPort(): /返回 Socket 连接到远程主机的端口号,例如:try

11、 Socket socket = new Socket(““ ,80);int port = socket. getPort(); catch(unknownHostException uex) catch(IOException e) (3) public int getLocalPort(): /一个 Socket 连接两个终端,返回本地连接终端的端口号.(4) public InetAddress getLocalAddress (): /返回用 户 Socket 绑定在网络哪个接口地址.(5) public OutputStream getOutputStream() throws I

12、OException: /返回一个原始的输出流(6) public InputStream getInputStream() throws IOException: /返回一个输入出流服务器端构造方法1. public ServerSocket (int port) throws IOException, BindException: /建立一个绑定在 端口号为 port 的服务器套接字对象.网络编程 4 个步骤:(1) 创建 Socket(2) 打开连接到 Socket 的输入/输出流(3) 按照一定的协议对 Socket 进行读写操作(4) 关闭 Socket.6j3_35.java(1)

13、 服务器端程序 (在 DOS 下先执行)import .*;import java.io.*;class TestServer public static void main(String args) try /创建服务器套接字对象,运行在服务器 8888 端口上.ServerSocket s = new ServerSocket(8888);while (true) / ServerSocket 对象调用 accept()方法在指定 8888 端口上监听客户端到来的连接(这个端口让客户端程序连接)Socket s1 = s.accept();/监听器通过 getOutputStream()方

14、法获得返回一个原始的输出流OutputStream os = s1.getOutputStream();/包含输出流创建数据输出字节流对象DataOutputStream dos =new DataOutputStream(os); /以 UTF 编码格式(写出)返回连接的远程主机(客户端)的地址,和客户端发出请求的端口号 1032.dos.writeUTF(“Hello,“ +s1.getInetAddress() + “port#“ + s1.getPort() + “nbye!“); dos.close(); /关闭输出字节流对象s1.close(); /关闭服务器套接字对象catch

15、(IOException e) System.out.println(“程序运行出错:“ + e);j3_36.java(2) 客户端程序 (使用 JCreator 执行)import .*;import java.io.*;7class TestClient public static void main(String args) try /创建客户端套接字对象实现与本地服务器(IP 地址 127.0.0.1), 连接服务器端口 8888.Socket s1 = new Socket(“127.0.0.1“, 8888);/套接字对象通过 getInputStream()方法获得一个输入流读

16、取服务器放入(线路输出流)的数据InputStream is = s1.getInputStream(); /包含字节输入流创建数据输入字节流对象DataInputStream dis = new DataInputStream(is); /数据输入流对象以 UTF 编码格式读入服务器发出的输出流数据并在客户端显示System.out.println(dis.readUTF(); dis.close(); /关 闭输入字节流对象s1.close(); /关闭 Socket catch (ConnectException connExc) System.err.println(“服务器连接失败!

17、“); catch (IOException e) 【例 11.5】Client.java8(1) 客户端程序:import java.io.*;import .*;public class Client public static void main(String args) String s=null;Socket mysocket;DataInputStream in=null; /声明数据输入流对象DataOutputStream out=null; /声明数据输出流对象trymysocket=new Socket(“127.0.0.1“,4331); /声明客户端套接字对象,连接服务

18、器通信端口为 4331/创建客户端数据输入流对象读取服务器端输出流in=new DataInputStream(mysocket.getInputStream();/创建客户端数据输出流对象放入服务器端线路输入流中out=new DataOutputStream(mysocket.getOutputStream(); for(int k=1;kwidth=300 height=300 codebase = codebaseURL alt = alternateText align = alignment vspace = pixels hspace = pixels name = applet

19、InstanceName 【例 12.1】Example12_1.java - Java.applet 运行原理22import java.applet.*;import java.awt.*;public class Example12_1 extends Applet Button button1,button2;int sum;public void init() / (1)调用 init()方法初始化 Applet setBackground(Color.gray); /设置 Applet 背景色button1=new Button(“yes“); /创建 yes, No 两个按钮bu

20、tton2=new Button(“No“); add(button1); /舔加按钮到 Applet 面板add(button2); public void start() /(2) 调用 start()方法启 动 Applet 小程序 sum=0;for(int i=1;iD:Java_UJava_Code09Example12_1.htmj3-43.java-HTML 文件向 Applet 传递参数.import java.awt.Graphics;import java.applet.Applet;public class j3_43 extends Applet String top

21、ic = “abcdefg“ ; /声明字符串参数名对象变量/Applet 小程序程序切入点.public void init () /取的静态网页 HTML 中向 Applet 传递的参数值 初始化字符串变量,参数名为topictopic = getParameter(“topic“); /取得参数对象中 传过来的值sNumber = getParameter(“var2“);/ paint()方法重新绘制获的图形类, g 图形上下文,该方法重写了 Component 类中的 paint()方法public void paint(Graphics g) g.drawString (topic

22、,25, 25) ; /绘制字符串g.drawString (sNumber,25, 50) ;j3-44.html -加载它的 HTML 文件并向 Applet 传递 参数值 Computer Science.24D:Java_UJava_Code09j3_44.html9-13 支持多 线程的 Applet 类- MultiThreadApplet.javaimport java.applet.Applet;import java.awt.*;public class MultiThreadApplet extends Applet implements RunnableThread th

23、isThread; /声明线程类对象引用变量public void start()if(thisThread=null) /如果线程为空thisThread=new Thread(this); /创建当前类线程对象thisThread.start(); /调用 start()启动线程public void stop()if(thisThread!=null)thisThread.stop();thisThread=null;public void run() /运行线程体259-14 支持多 线程的 Applet 子类-TeatApplet2.java import java.awt.*;pu

24、blic class TeatApplet2 extends MultiThreadAppletint Counter; /声明循环计次变量public void run() /线程体while(true)Counter+; /累加计次变量if(Counter100) /如果累加计次变量100Counter=0; /设置 Counter=0repaint(); /重新调用 paint( )方法public void paint(Graphics g)g.setColor(Color.red);/在坐标 100,0 处绘制短轴为 Counter,长椭轴为 Counter+10 的红色椭圆形g.f

25、illOval(100,0,Counter,Counter+10); 编译为 TeatApplet2.classTeatApplet2.htm26D:Java_UJava_Code09TeatApplet2.htm9.7 Applet 事件响应和处理例 9-15 TestMouse.java-鼠 标事件响应import java.awt.*;import java.applet.*;public class TestMouse extends Applet String text=“;public void paint(Graphics g)g.drawString(text,20,20);p

26、ublic boolean mouseDown(Event event,int x,int y) /鼠标按下处理函数text=“你已经按下了鼠标!“;repaint();return true;public boolean mouseUp(Event event,int x,int y) /鼠标松开处理函数text=“;repaint();return true;TestMouse.htm27D:Java_UJava_Code09TestMouseTestMouse.htm例 9-16 TestKeyboard.java-键盘事件响应import java.awt.*;import java.

27、applet.*;public class TestKeyboard extends AppletString text=“;public void paint(Graphics g)g.drawString(text,20,20);public boolean keyDown(Event event,int x) /键盘被按下的处理函数text=“你已经按下了键盘上的键,快松开! “;repaint();return true;public boolean keyUp(Event event,int x) /键盘被松开的处理函数text=“;repaint();return true;D:J

28、ava_UJava_Code09TestKeyboardTestKeyboard.htm9.8 Applet 多媒体应用例 9-17 ShowImage.java- 显示图像import java.awt.*;import java.applet.*;public class ShowImage extends AppletImage picture; /定义类型为 Image 对象的成员变 量public void init()28/取得图像 panda.gif 的 URL 并装载图像存放在 picture 对象中picture=getImage(getCodeBase(),“panda.g

29、if“); public void paint(Graphics g) g.drawImage(picture,100,0,this);/在坐标 100,0 处绘制并显示图像D:Java_UJava_Code09ShowImageShowImage.htm例 9-18 BackgroundImage.java- 使用双缓冲显示图像import java.awt.*;import java.applet.*;public class BackgroundImage extends Applet /继承 AppletImage picture;boolean ImageLoaded=false;p

30、ublic void init()picture=getImage(getCodeBase(),“data.gif“);/装载图像Image offScreenImage=createImage(230,320); /创建 Image 对象29Graphics offScreenGC=offScreenImage.getGraphics(); /获取 Graphics对象offScreenGC.drawImage(picture,0,0,this); /绘制非屏幕图像(屏幕上不显示)public void paint(Graphics g)if(ImageLoaded)/ 绘制显示图像将启动线

31、程调用 imageUpdate( )方法,null 参数可防止图像已装入内存后再调用 imageUpdate( )方法g.drawImage(picture,100,0,null);showStatus(“Done“); /状态栏中显示“Done“elseshowStatus(“Loadingimage“); /状态栏 中显示“Loadingimage“public boolean imageUpdate(Image img,int infoflags,int x,int y,int w,int h)if(infoflags=ALLBITS) /图象在内存中装载的字节数ImageLoaded=

32、true; /图象装载为真repaint();return false;elsereturn true;D:Java_UJava_Code09BackgroundImageBackgroundImage.htm30例 9-19 TestSound.java Applet 使用 AudioClip 类 播放声音import java.applet.*;import java.awt.*;import java.awt.event.*;public class TestSound extends Applet implements ActionListener,RunnableAudioClip

33、audio; /声明音 频剪辑对象引用变量Thread thread; /声明线程对象引用变量Button playau, loopau, stopau; /声明 3 个按钮对象引用变量public void init() thread=new Thread(this); /创建线程对象实例thread.setPriority(Thread.MIN_PRIORITY); /设置线程优先权playau=new Button(“play“); /创建三个按钮对象loopau=new Button(“loop“);stopau=new Button(“stop“);playau.addActionListener(this); /注册 3 个按钮监听器loopau.addActionListener(this);stopau.addActionListener(this);add(playau); /添加按钮到 Applet 面板上add(loopau);add(stopau);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报