您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 第9章网络多媒体应用
1第九章网络多媒体应用9.1网络编程基础(URL编程和Socket编程)9.1.1URL编程URL(UniformResourceLocator,统一资源定位器)用于表示Internet上资源的地址,即网络上数据的位置.资源为文件,目录,对象的引用.利用URL的表示和建立,Java程序可直接读入网络上的数据,或把数据传送到网络的另一端.Java.net包定义了对应的URL类.其常用4个构造方法如下:(1)publicURL(Stringspec);//这个构造方法用指定的URL来创建URL对象,参数为URL的IP地址和文件如:try{URLu1=newURL();}catch(MalformedURLExceptione){…….}(2)publicURL(URLcontext,Stringspec);//该构造方法用已存在的URL对象的context创建URL对象例如:try{URLu2=newURL(u1,welcome.html);}catch(MalformedURLExceptione){…….}(3)publicURL(Stringprotocol,Stringhost,Stringfile);//该构造方法用指定的协议,主机名,路经及文件名创建的URL对象例如:try{URLu3=newURL(http,);}catch(MalformedURLExceptione){…….}(4)publicURL(Stringprotocol,Stringhost,intport,Stringfile);//该构造方法用指定的协议,主机名,端口号,文件路经及文件名创建的一个URL对象例如:try{URLu3=newURL(http,);}catch(MalformedURLExceptione){…….}使用URL类的openStream()方法可以连接和获取URL对象的内容(即返回一个输入流对象读URL数据)方法格式为:publicfinalInputStreamopenStream()throwsIOExceptionURL类的常用方法:publicfinalObjectgetContent()----取的传输协义.publicStringgetFile()----取的资源文件名.publicStringgetHost()----取的主机名.publicStringgetPort()----取的端口号.publicStringgetProtocol()----取的传输协义.publicStringtoString()----用于把URL转化为字符串.例:URL编程读取yahoo站点地址的内容importjava.io.*;importjava.net.*;classURLReader{publicstaticvoidmain(Stringargs[]){try{2//用指定的URL来创建URL对象URLtirc=newURL();//创建缓冲区输入流BufferedReaderin=newBufferedReader(newInputStreamReader(tirc.openStream()));Strings;//接收数据的字符串变量swhile((s=in.readLine())!=null)System.out.println(s);in.close();//关闭BufferedReader输入流.}catch(MalformedURLExceptione){//捕捉URL缺陷异常System.out.println(e);//输出缺陷异常信息}catch(IOExceptione){//捕捉I/O异常System.out.println(e);}}}tirc.openStream()//用创建URL对象tirc的openStream()方法建立到当前URL()的连接并返回一个从该连接地址读取数据的输入流对象InputStreamReader(InputStreamin)//从字节流到字符流的桥梁:它读取字节流并转为字符流.in一个输入流由tirc.openStream()代表输入流,并用new创建字节流转为字符流对象BufferedReader(Readerinintsz)//构造方法参数in—阅读器,sz—输入缓冲区大小.本例创建一个缓冲字符输入流对象,用in引用它,输入缓冲区大小为默认.再调用它的读入行方法将字符流赋给(存入)变量s中,再输出字符流.9.1.2Socket编程套接字(Socket)是由伯克利大学首创的.它允许程序把网络连接当成一个流,可以在这个流中读取字节.java.net包中定义的两个类Socket(Client端套接字)和ServerSocket(Server端套接字),分别用java的流模型技术来实现客户端和服务器端或两台计算机之间的网络通信,当套接字连接建立后,也就是一条通信线路被建立起来了.Socket通信模型如下图:3套接字能执行7种基本操作:(1)连接到远程计算机(2)绑定到端口(3)接收从远程计算机来的绑定端口上的连接(4)监听到达的数据(5)发送数据(6)接收数据(7)关闭连接.客户端:常用套接字Socket类构造方法1.publicSocket(Stringhost,intport)throwsunknownHostException,IOException//建立一个IP地址代表的服务器主机host,端口号为port的套接字(0~1023为通信口,一般用1024~65535口),连接到服务器上,例如.Try{Socketsoc=newSocket();}//发送数据(http:占用80口)catch(unknownHostExceptionuex){}catch(IOExceptione){}2.Socket类常用方法(1)publicInetAddressgetInetAddress()//调用Socket对象的getInetAddress()方法,返回连接到远程主机的IP地址,如果连接失败,则返回以前连接的主机.例如:Try{Socketsoc=newSocket();InetAddresshost=soc.getInetAddress();}catch(unknownHostExceptionuex){}catch(IOExceptione){}(2)publicintgetPort()://返回Socket连接到远程主机的端口号,例如:try{Socketsocket=newSocket();intport=socket.getPort();}catch(unknownHostExceptionuex){}catch(IOExceptione){}输入流客户端Socket输出流输出流输入流服务器端Socket互相连接互相连接4(3)publicintgetLocalPort()://一个Socket连接两个终端,返回本地连接终端的端口号.(4)publicInetAddressgetLocalAddress()://返回用户Socket绑定在网络哪个接口地址.(5)publicOutputStreamgetOutputStream()throwsIOException://返回一个原始的输出流(6)publicInputStreamgetInputStream()throwsIOException://返回一个输入出流服务器端构造方法1.publicServerSocket(intport)throwsIOException,BindException://建立一个绑定在端口号为port的服务器套接字对象.网络编程4个步骤:(1)创建Socket(2)打开连接到Socket的输入/输出流(3)按照一定的协议对Socket进行读写操作(4)关闭Socket.j3_35.java(1)服务器端程序(在DOS下先执行)importjava.net.*;importjava.io.*;classTestServer{publicstaticvoidmain(Stringargs[]){try{//创建服务器套接字对象,运行在服务器8888端口上.ServerSockets=newServerSocket(8888);while(true){//ServerSocket对象调用accept()方法在指定8888端口上监听客户端到来的连接(这个端口让客户端程序连接)Sockets1=s.accept();//监听器通过getOutputStream()方法获得返回一个原始的输出流OutputStreamos=s1.getOutputStream();//包含输出流创建数据输出字节流对象DataOutputStreamdos=newDataOutputStream(os);//以UTF编码格式(写出)返回连接的远程主机(客户端)的地址,和客户端发出请求的端口号1032.dos.writeUTF(Hello,+s1.getInetAddress()+port#+s1.getPort()+\nbye!);dos.close();//关闭输出字节流对象s1.close();//关闭服务器套接字对象}}catch(IOExceptione){System.out.println(程序运行出错:+e);}5}}j3_36.java(2)客户端程序(使用JCreator执行)importjava.net.*;importjava.io.*;classTestClient{publicstaticvoidmain(Stringargs[]){try{//创建客户端套接字对象实现与本地服务器(IP地址127.0.0.1),连接服务器端口8888.Sockets1=newSocket(127.0.0.1,8888);//套接字对象通过getInputStream()方法获得一个输入流读取服务器放入(线路输出流)的数据InputStreamis=s1.getInputStream();//包含字节输入流创建数据输入字节流对象DataInputStreamdis=newDataInputStream(is);//数据输入流对象以UTF编码格式读入服务器发出的输出流数据并在客户端显示System.out.println(dis.readUTF());dis.close();//关闭输入字节流对象s1.close();//关闭Socket}catch(ConnectExceptionconnExc){System.err.println(服务器连接失败!);}catch(IOExceptione){}}}【例11.5】Client.java6(1)客户端程序:importjava.io.*;importjava.net.*;publicclassClient{publicstaticvoidmain(Stringargs[]){Strings=null;Socketmysocket;DataInputStreamin=null;//声明数据输入流对象DataOutputStreamout=null;//声明数据输出流对象try{mysocket=newSocket(127.0.0.1,4331);//声明客户端套接字对象,连接服务器通信端口为4331//创建客户端数据输入流对象读取服务器端输出流in=newDataInputStream(mysocket.getInputStream());//创建客户端数据输出流对象放入服务器端线路输入流中out=ne
本文标题:第9章网络多媒体应用
链接地址:https://www.777doc.com/doc-2200013 .html