书签 分享 收藏 举报 版权申诉 / 85
上传文档赚钱

类型第12章网络程序设计课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:2861069
  • 上传时间:2022-06-05
  • 格式:PPT
  • 页数:85
  • 大小:783.50KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《第12章网络程序设计课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    12 网络程序设计 课件
    资源描述:

    1、1第12章 网络程序设计212.1 网络的基本概念 java语言是Internet上的世界语。网络应用是Java语言取得成功的领域之一,它已经成为现在Internet上最流行的一种编程语言。Java语言在网络编程方面提供了许多方便,其他语言往往需要数页代码才能完成的事情,在Java中可能只需要一条语句就可以。借助HTML从网上下载applet在程序中通过URL访问网上资源通过包中的类直接在程序中实现网络通讯31、Java的网络通信分为三个层次: 最高一级的网络通信:从网络上下载Applet。客户端浏览器通过HTML文件中的标记来识别Applet,并解析Applet的属性,通过网络获取Apple

    2、t得字节码文件。(由浏览器提供)(由浏览器提供)声音文件和图象文件的获取是次一级的通信。通过类URL的对象指明文件所在位置,并从网络上下载声音和图象文件。(由(由Java开发环境提开发环境提供)供) 最低一级的通信是利用包中提供的类直接在程序中实现网络通信。(由(由Java语言开发语言开发包提供)包提供)42、网络协议应用层:使用URL、URLConnection 类传输层:使用Socket、ServerSocket 类Application(HTTP, FTP, telnet)Transport(TCP, UDP,.)Network(IP)Link(device driver)Physics

    3、一般应用程序是靠TCP(而不是IP)实现通讯功能,因为它们需要大量数据的无差错传输。53、Java中的网络支持中的网络支持包中的主要的类和可能产生的例外包括:面向IP层的类:InetAddress面向应用层的类:URL、URLConnection面向网络层的类:TCP协议相关类:Socket、ServerSocketUDP协议相关类:DatagramPacket、DatagramSocket、MulticastSocket可能产生的例外:BindException、ConnectException、MalformedURLException、NoRouteToHostException、Pro

    4、tocolException、SocketException、UnknownHostException、UnknownServiceException3、Java中的网络支持中的网络支持64、传输层协议TCP与UDP TCP(Transport Control Protocol) 两主机之间有连接的、可靠的、端对端(end-to-end)的数据流的传输 如http, ftp, telnet 的传输层均使用此协议 UDP(User Datagram Protocol) 从一台机器向另一台机器以无连接的、数据报的方式进行通讯的协议 如:email可以使用UDP75、主机与端口 如何确定通讯的目标,

    5、两部分: 主机使用IP地址或域名 端口,用于区分同一台主机上的不同的进行通讯的应用进程 端口 01023系统使用 102465535用户使用,最好8000以上86、Java与网络Java提供的网络功能有三大类: URL, Socket, Datagram.URL是三大功能中最高级的一种,通过URL Java程序可以直接送出或读入网络上的数据.Socket是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道.Datagram是更低级的网络传输方式,它把数据的目的纪录在数据包中,然后直接放在网络上.912.2 URL的使用在WWW上,每一信息资源都有统一的且唯一的地址,该地址就叫

    6、URL(Uniform Resource Locator),它是WWW的统一资源定位标志。12.2.1 URL的组成资源类型(协议)存放资源的主机域名资源文件名端口 10用字符串表示Internet网络上资源的地址,指向World Wide Web 上的一个资源。http:/:80/dir/file.htm协议名( http、 ftp、 file等)资源位置(主机域名,也可用IP地址)端口号(服务器监听程序的端口。WWW服务端口隐含值为80,FTP 21 ,Telnet 23)路径名(文件在机器中的路径名。资源文件或CGI程序等)引用(# 指向资源文件的某一个位置)1112.2.2 URL类.

    7、URL 创建URL对象代表一个URL资源构造方法1) URL(String spec) 例: URL url1=new URL(“http:/:80/file”);2) URL(URL baseURL, String relativeURL) URL url2=new URL(url1, “file.html”);例: URL url1 = new URL( http:/:120/ ) URL url2 = new URL(url1, “index.html”);123)URL(String protocol, String host, int port, String file)4)URL(

    8、String protocol, String host, String file)使用缺省80端口注意:构造函数抛出MalformedURLException13URL类的常用方法 方法1 取出URL的指定成分信息 url1.getProtocol() /协议名 url1.getHost() /主机名 url1.getPort()/端口号 url1.getFile()/文件名 方法2 InputStream url1.openStream()/获得一个输入流String toString()/ 将此URL对象转换为字符串的形式14例12-1 URL的使用import .*;public cl

    9、ass URLTest public static void main(String args) try URL hp=new URL(http:/:80/file); System.out.println(Protocol:+hp.getProtocol(); System.out.println(Port:+hp.getPort(); System.out.println(Host:+hp.getHost(); System.out.println(File:+hp.getFile(); System.out.println(Ext:+hp.toExternalForm(); catch(

    10、MalformedURLException e) System.out.println(e.toString(); 运行结果-运行结果15Protocol:httpPort:80Host:File:/fileExt:http:/ .*;import java.io.*;public class UrlSitepublic static void main(String args)if(args.length1)System.out.println(没有给出URL);System.exit(1);elsefor(int i=0;iargs.length;i+)urlSite(argsi);18p

    11、ublic static void urlSite(String urlname)String s;URL url=null;InputStream urlstream=null;tryurl=new URL(urlname);catch(Exception e)System.out.println(URL名字错误);tryurlstream=url.openStream();DataInputStream dat=new DataInputStream(urlstream);while(s=dat.readLine()!=null)System.out.println(s);catch(IO

    12、Exception e)System.out.println(URL文件打开错误);19键入java UrlSite file:/e:/UrlSite.java的运行结果若键入java UrlSite http:/?例12-3 URL类使用举例import .*;import java.io.*;public class URL12_3 public static void main(String args) try URL urladd=new URL(http:/ System.out.println(urladd.getAuthority(); System.out.println(ur

    13、ladd.getDefaultPort(); System.out.println(urladd.getFile(); System.out.println(urladd.getHost(); System.out.println(urladd.getPath(); System.out.println(urladd.getProtocol();20BufferedReader readur1=new BufferedReader(new InputStreamReader(urladd.openStream();String content=;String line=;while(line=

    14、readur1.readLine()!=null)content+=line;readur1.close();FileWriter outfile=new FileWriter(D:output.html);outfile.write(content);outfile.close(); catch(Exception e)e.printStackTrace(); 21运行结果80/technetwork/java/ URLConnection类一个URLConnection对象代表一个Java程序与URL资源的通讯连接。通过它可对这个URL资源读或写。通过openConnection方法,获得

    15、URLConnection类对象 1、创建URLConnection类的对象URL url=new URL(“http:/” ):URLConnection connect=url.openConnection(); URLConnection url. openConnection()成功,返回一个URLConnection对象不成功,抛出IOException例外242、建立输入/输出数据流URLConnection类的读写渠道 getInputStream() getOutputStream()URL资源25例12-4使用URLConnection类获取远程服务器端的数据import .

    16、*;import java.io.*;public class Connect12_4public static void main(String args)String urlname=“http:/;String s;URL url=null;URLConnection conn=null;InputStream in=null;tryurl=new URL(urlname);conn=url.openConnection();catch(Exception e)System.out.println(URL名字错误); tryin=conn.getInputStream();DataInp

    17、utStream dat=new DataInputStream(in);while(s=dat.readLine()!=null)System.out.println(s);dat.close(); catch(Exception e)System.out.println(URL文件打开错误); 26运行结果(部分信息)ar mediav_ad_width = 950;var mediav_ad_height = 90;var mediav_default_turl = http:/ mediav_default_material = http:/ mediav_ad_listenurl=h

    18、ttp:/ mediav_default_clickurl = http:/ _a=new Image();_a.src=http:/ public static static InetAddressInetAddress getByNamegetByName(String host) (String host) hosthost可以是一个机器名,也可以是一个可以是一个机器名,也可以是一个IPIP地址或一个地址或一个DSNDSN域名。域名。public static public static InetAddressInetAddress getLocalHostgetLocalHost()

    19、() 这二个方法通常会产生UnknownHostException例外,应在程序中捕获处理。InetAddress类的主要方法:public byte public byte getAddressgetAddress()():获得本对象的:获得本对象的IPIP地址地址(存放在字节数组中)。(存放在字节数组中)。public public StringString getHostAddressgetHostAddress()():获得本对象的:获得本对象的IPIP地址地址“% %d.%d.%d.%dd.%d.%d.%d”。public public StringString getHostNam

    20、egetHostName()():获得本对象的机器名。:获得本对象的机器名。12.2.4 InetAddress类29import .*;public class getIP12_5public class getIP12_5public static void main(String args) public static void main(String args) InetAddress pku = null; InetAddress pku = null; try try pku = InetAddress.getByName( pku = InetAddress.getByName(

    21、);); catch(UnknownHostException e) catch(UnknownHostException e) System.out.println(pku); System.out.println(pku); 例例12-5 使用使用InetAddress查找查找IP地址地址 通过InetAddress,可以获取本机的IP地址:import .*;public class getLocalHostTest public static void main(String args) InetAddress myIP = null; try myIP = InetAddress.g

    22、etLocalHost(); catch(UnknownHostException e) System.out.println(myIP); 例例12-6 使用使用InetAddress获取本机获取本机IP地址地址A-6F708DEE6CE74/169.254.120.633112.3 Socket通信 端到端的连接与通信 网络上的两个程序(进程)通过一个双向的通信连接实现数据的交换。 双向链路的一端称为一个socket(套接字) 主机端口(用于区分同一台主机上的不同的通信应用进程:01023系统 102465535用户)3212.3.1 TCP与Socket 有连接的服务中,服务器进程端口绑

    23、定一个Socket,监听客户请求 请求 服务进程 响应请求 服务进程与客户进程各绑定一个Socket,进行相互通讯。3312.3.2 UDP与Datagrams 使用UDP协议传送数据时,把数据分割为各自独立的多个数据报(Datagrams), 分别发送,数据报是否到达、到达顺序以及内容是否正确不保证。 IP以及端口地址包含在报头中3412.3.3 使用Socket编程使用socket在Client程序和Server程序间建立连接(通讯的通道)1、 Socket 编程步骤 创建socket 打开连接到socket的输入/输出流。 按照一定的协议对socket进行读写操作,实现所要完成的主要工作

    24、。 关闭socket352、Socket类的构造方法 构造方法: Socket(InetAddress addr , int port) Socket(String addr , int port) 因是TCP支持类,所以需要端口号。 使用该类扮演客户机的角色。 TCP连接会涉及客户机/服务器双方端口号。但客户机端口由TCP/IP软件自动分配。 方法: InputStream getInputStream(); outputStream getoutputStream();363、使用Socket编程Server端通讯过程Client端通讯过程在某端口创建ServerSocket对象提供监听等

    25、待并接收Client端的请求利用返回的Socket对象与Client端通讯关闭Socket结束与此Client的通讯关闭监听创建Socket对象向Server某端口请求利用此Socket对象与Server端通讯关闭Socket结束与此Server的通讯建立连接数据通讯拆除连接37Client/试图连接Socket(host;port#)OutputStreamInpotStreamSocket.close()Server/占用某个端口ServerSocket(hostport)/等待连接ServerSocket.accept()Socket()OutputStreamInpotStreamSo

    26、cket.close()4、socket通信384、socket通信建立Socket在客户端:try Socket client = new Socket(host, 4444);catch(IOException e)在服务器端:try ServerSocket server = new ServerSocket(4444);catch(IOException e)Socket socket = null;try socket = server.accept(); /等待客户端连接catch(IOException e)395、 Socket通信演示 演示一个简单的服务器与客户的交互,即服务

    27、器等待,客户访问,相互通一次信息.40Socket. 8.5 Socket创建服务器创建服务器(端口号端口号)定义数据成员定义数据成员服务器等待服务器等待网络连接网络连接建立建立socket流流读客户读客户 端信息端信息向用户发出一个字符串向用户发出一个字符串创建创建Socket实例实例定义数据成员定义数据成员建立建立socket流流读读socket流流(接收并显示接收并显示)送用户名给送用户名给服务器服务器关闭流关闭流waiting for user127.0.0.1 11111111login:connetcting client.java提示用户登录成功提示用户登录成功读读socket流

    28、流User :javaLogin successful41Socket 例:显示服务器与客户机间的通信(服务器端)PrintStream ps=null;DataInputStream dis=null;String username;ServerSocket serverSocket=null;Socket clientSocket=null;try serverSocket=new ServerSocket(1111);catch (IOException e) System.out.println( “Error”+e);System.exit(1);try clientSocket=s

    29、erverSocket.accept();catch (IOException e) System.out.println(Accept failed.);System.exit(1);创建服务器创建服务器(端口号端口号)定义数据成员定义数据成员服务器等待服务器等待网络连接网络连接42Socket .ps=new PrintStream(clientSocket.getOutputStream();dis=new DataInputStream(clientSocket.getInputStream(); 创建服务器创建服务器(端口号端口号)定义数据成员定义数据成员服务器等待服务器等待网络连接

    30、网络连接建立建立socket流流向客户发出登录要求向客户发出登录要求 ps.println(login:); ps.flush();43Socketps.println(login sucessful); ps.flush();System.out.println(username+ has logged off);读客户读客户 端信息端信息创建服务器创建服务器(端口号端口号)定义数据成员定义数据成员服务器等待服务器等待网络连接网络连接建立建立socket流流向用户发出登录要求向用户发出登录要求通知客户连接完毕通知客户连接完毕if (username=dis.readLine()=null)S

    31、ystem.out.println(readLine returned null);System.exit(1); System.out.println(Username:+username);44Socket 例:显示服务器与客户机间的通信(客户端)创建创建Socket实例实例PrintStream output;DataInputStream input;String string;Socket socket=null;定义数据成员定义数据成员trysocket=new Socket(127.0.0.1,1111);catch(IOException e) System.out.print

    32、ln(Error ”+e); return;input=new DataInputStream(socket.getInputStream();output=new PrintStream(socket.getOutputStream();建立建立socket流流45Socket .System.out.println(input.readLine();创建创建Socket实例实例定义数据成员定义数据成员建立建立socket流流读读socket流流(看到提示看到提示)System.in.read(bArray);String s=new String(bArray,0);output.prin

    33、tln(s);从键盘上读送用户从键盘上读送用户名送给服务器端名送给服务器端关闭流关闭流socket.close();input.close();output.close();System.out.println(Done);System.out.println(input.readLine();System.out.print(Logging off.);读服务器反馈读服务器反馈46Socket. 8.5 Socket创建服务器创建服务器(端口号端口号)定义数据成员定义数据成员服务器等待服务器等待网络连接网络连接建立建立socket流流读客户读客户 端信息端信息向用户发送字符串向用户发送字符串

    34、创建创建Socket实例实例定义数据成员定义数据成员建立建立socket流流读读socket流流(看到提示看到提示)送用户名给送用户名给服务器服务器关闭流关闭流waiting for user127.0.0.1 11111111login:connetcting client.java提示用户登录成功提示用户登录成功读读socket流流User :javaLogin successful476、Socket与I/O流 一个socket可以持有两个流输入流与输出流48Client端 用Server端主机号,端口号创建Socket对象Socket mClient = new Socket(166.

    35、111.3.3,8012); 利用Socket实现网络 I/OInputStream rDIn=mClient.getInputStream();OutputStream rD=mClient.getOutputStream();DataInput Din=new DataInputStream(rDIn);DataOutput Dout=new DataOutputStream(rD); 关闭Socket,结束通讯mClient.close();49例12_7 C/S例 client 端import java.io.*;import .*;public class CLient12_7 pu

    36、blic static void main(String args) try Socket socket1= new Socket(127.0.0.1,8888); BufferedReader sin= new BufferedReader( new InputStreamReader( socket1.getInputStream(); PrintWriter sout= new PrintWriter( socket1.getOutputStream() ); BufferedReader input=new BufferedReader( new InputStreamReader(

    37、System.in) ); 50String ask=input.readLine(); while (!ask.equals(end) sout.println(ask); sout.flush(); System.out.println(server answer: + sin.readLine() ); ask=input.readLine(); sin.close(); sout.close(); socket1.close(); catch (Exception e) /main /class cbyeend51Server端 创建一个ServerSocket对象(指定端口号). S

    38、erverSocket mSer = new ServerSocket(8012); 在该端口监听,当收到Client发出的请求时,创建一个Socket对象与此Client通讯: Socket socket = ss.accept(); 接收到Client请求之前,该语句处于阻塞状态。 通过Socket类的I/O流对象与Client端通信。 结束通信,关闭输入输出流、关闭Socket对象。 撤消服务时,关闭 ServerSocket对象: mServer.close()。 Socket方法: InetAddress getInetAddress() 返回socket连接的地址52 例12_8

    39、C/S例Server端import java.io.*;import .*;public class Server12_8 public static void main(String args) try ServerSocket ss = new ServerSocket(8888); Socket socket = ss.accept(); BufferedReader cin = new BufferedReader (new InputStreamReader( socket.getInputStream(); PrintWriter cout = new PrintWriter (

    40、socket.getOutputStream() ); BufferedReader input = new BufferedReader ( new InputStreamReader( System.in) ); String answer ,ask ; ask = cin.readLine();53c/s例Server端while (!ask.equals(bye) System.out.println(client ask : + ask ); answer = input.readLine() ; cout.println(answer); cout.flush(); ask = c

    41、in.readLine(); cin.close(); cout.close(); socket.close(); ss.close() ; catch (Exception e) /main /class s例12_9简单的客户服务器程序import java.io.*;import .*;public class Client12_9 public static void main(String args) try Socket sc=new Socket(127.0.0.1,9999); sc.setSoTimeout(10000); System.out.println(是否已建立连接

    42、:+sc.isConnected(); System.out.println(接收缓冲区的默认大小:+sc.getReceiveBufferSize(); System.out.println(发送缓冲区的默认大小:+sc.getSendBufferSize(); PrintWriter out=new PrintWriter(sc.getOutputStream(),true); BufferedReader in=new BufferedReader(new InputStreamReader(sc.getInputStream();54for(int i=1;i+msg);out.pri

    43、ntln(END);sc.shutdownOutput();sc.shutdownInput();System.out.println(输入流是否已关闭:+sc.isInputShutdown();System.out.println(输出流是否已关闭:+sc.isOutputShutdown();sc.close();catch(Exception e)e.printStackTrace();55服务器端程序:服务器端程序:ExServer12_9java.io.*;import .*;public class ExServer12_9 public static void main(Str

    44、ing args) try ServerSocket soc=new ServerSocket(9999);soc.setReceiveBufferSize(1024);soc.setSoTimeout(10000);System.out.println(服务器端接收缓冲区大小为:+soc.getReceiveBufferSize();System.out.println(启动服务器成功,等待端口号为:9999);Socket client=soc.accept();System.out.println(连接成功!来自+client.toString();BufferedReader in=n

    45、ew BufferedReader(new InputStreamReader(client.getInputStream();PrintWriter out=new PrintWriter(client.getOutputStream(),true);56while(true)String str=;str=in.readLine();if(str!=) System.out.println(str);if(str.equals(END)|client.isClosed()System.out.println(客户已退出!);break;out.println(服务器响应:+str);out

    46、.flush();System.out.println(服务器已经关闭!);soc.close();client.close();catch(Exception e)e.printStackTrace();5758示范例题简单的服务器和客户机程序Server1.java Client1.java5912.3.4多客户端通讯 服务器通信程序采用多线程,每个线程负责与一个客 户对话 sSocket=new Serversocket(8000) while (listening) tSocket= sSocket.accept() ; new ServerThread(tSocket).start(

    47、) ServerThread extends Thread public void run() 服务器端通信程序例12_10 多客户端通讯public class ExMulServer12_10 public static void main(String args) try int clientNumber=1; Socket socket; ServerSocket server=new ServerSocket(9999); System.out.println(服务器端程序已启动!); while(true)System.out.println(等待下一个连接!);socket =s

    48、erver.accept();System.out.println(客户+clientNumber+连接成功,其IP地址是:+socket.getInetAddress();new ServerThread(socket,clientNumber);clientNumber+;catch(Exception e)e.printStackTrace();60class ServerThread extends Threadprivate Socket socket;private int clientNumber;ServerThread(Socket socket,int clientNumb

    49、er)this.socket=socket;this.clientNumber=clientNumber;start();61public void run() tryBufferedReader in =new BufferedReader(new InputStreamReader(socket.getInputStream();PrintWriter out=new PrintWriter(socket.getOutputStream(),true);while(true)String str=;str=in.readLine();if(str!=)System.out.println(

    50、clientNumber+str); if(str.equals(END)|socket.isClosed()System.out.println(客户端+clientNumber+响应+str);out.flush();out.println(对客户端+clientNumber+服务已经关闭);socket.close(); catch(Exception e)e.printStackTrace(); 6263例:C/S间的流式Socket通讯 ThreadServerTest.java 实现服务器的功能,在8080端口监听 当检测到有客户机的请求时,产生一个新的线程由该线程负责与客户机的通

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:第12章网络程序设计课件.ppt
    链接地址:https://www.163wenku.com/p-2861069.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库