欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Java程序设计-14-网络编程.ppt

    • 资源ID:70008073       资源大小:811KB        全文页数:46页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Java程序设计-14-网络编程.ppt

    JavaJava程序设计程序设计第第1414章章 网络编程网络编程 学习目标学习目标网络编程基础概念了解包中的一些常用类的使用方法实现基于TCP协议的客户/服务器程序开发实现基于UDP协议的网络通信初步学习URL资源访问技术14.1 14.1 网络基础网络基础1 主机名和IP地址IP地址就是唯一标识计算机等网络设备的网络地址u如:166.111.136.3,202.117.30.79主机名(hostname):网络地址的助记名,按照域名进行分级管理。如:在Internet上IP地址和主机名是一一对应的,通过域名解析可以由主机名得到机器的IP 2端口(port)通常一台主机上总是有很多个进程(运行中的程序)需要网络资源进行网络通讯。网络通讯的对象准确的讲不是主机,而应该是主机中运行的进程。具体来讲,端口号(port number)就是网络通信时同一机器上的不同进程的标识。TCP/IP系统中的端口号是一个16位的数字,它的范围是065535。u1)公认端口:从0到1023u2)注册端口:从1024到49151u3)动态和/或私有端口客户和服务器必须事先约定所使用的端口。如果系统两部客户和服务器必须事先约定所使用的端口。如果系统两部分所使用的端口不一致,那就不能进行通信。分所使用的端口不一致,那就不能进行通信。3 使用端口的一些限制从0到1023,它们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服 务的协议。如21对应的是FTP服务,23则是提供的Telnet服务。除非要和那些服务之一进行通信(例如Telnet,SMTP邮件和FTP等),否则在程序中不应该使用它们。例如:80端口实际上总是HTTP通信中Web服务的端口号。从49152到65535主要用于动态和/或私有端口。理论上,不应为服务分配这些端口14.1.2 14.1.2 传输协议传输协议 协议就是通讯双方互相约定的传送信息的格式定义。目前使用最广泛的网络协议是Internet上所使用的TCP/IP协议。包含:uTCPuUDPTCP和UDP是底层的网络通信协议,进行应用层程序开发时,需要考虑自定义的通信协议。14.1.2 14.1.2 传输协议传输协议(cont.)(cont.)1 TCP协议TCP是Transmission Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方各有一个socket,两个socket之间必须建立连接,以便在TCP协议的基础上进行通信。14.1.2 14.1.2 传输协议传输协议(cont.)(cont.)2 UDP协议UDP是User Datagram Protocol的简称,是一种无连接的协议,也不进行差错及流量的控制。因此UDP提供的服务是不可靠的,基于UDP的应用程序可根据情况自己承担可靠性方面的工作14.1.2 14.1.2 传输协议传输协议(cont.)(cont.)3 TCP和UDP的差异u使用UDP时,无需要建立发送方和接收方的连接;TCP中多了一个连接建立的时间。u使用UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。而TCP没有这方面的限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大量的数据。uUDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。而TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。讨论:讨论:既然有了保证可靠传输的TCP协议,为什么还要非可靠传输的UDP协议呢?14.3 14.3 包包DatagramPacket 和和DatagramSocket两个类构成了两个类构成了UDP开发的基础开发的基础ServerSocket 和和Socket,两个类构成了,两个类构成了TCP开发的基础开发的基础InetAddress类用于表示互联网协议类用于表示互联网协议(IP)地址地址通过程序获得网络地址通过程序获得网络地址import .*;public class GetLocalHostTest public static void main(String args)InetAddress myIP=null;/声明声明IP地址对象变量地址对象变量 try myIP=InetAddress.getLocalHost();/获得本机获得本机IP地址地址 /下面的语句显示了获得指定主机名的下面的语句显示了获得指定主机名的IP地址的方法地址的方法 /myIP=InetAddress.getByName();System.out.println(“主机地址:主机地址:+myIP.getHostAddress();System.out.println(HostName is+myIP.getHostName();catch(UnknownHostException e)/忽略异常忽略异常 14.2 14.2 基于基于TCPTCP的网络编程的网络编程网络上的两个程序通过一个双向的通讯连接实现数据的可靠交换,这个双向链路的一端称为一个Socket。Socket是TCP/IP协议的一个十分流行的编程界面,通常用来实现客户方和服务方的连接。一个Socket实例由一个IP地址和一个端口号唯一确定。Socket是一种用于网络通信的低层开发接口,借助于通信两端的应用程序(实际上是Socket)可以利用输入输出流完成数据交换。14.2.1 14.2.1 客户和服务器客户和服务器dialing基于基于SocketSocket的通信过程的通信过程创建创建ServerSocketaccept()?yesNcloseclosesocketsocketMorningwelcome服务器端程序客户端程序14.2.2 14.2.2 创建服务器端创建服务器端SocketSocket作用u运行在主机上的服务程序提供了面向客户端的特定应用,例如HTTP服务、FTP服务等,读者也可以创建属于自己的特定服务。为了达到这一目的,首先就需要创建一个服务器套接字-ServerSocket,注册到主机系统,开始提供侦听服务。构造函数uServerSocket(int port);uServerSocket(int port,int backlog);uServerSocket(int port,int backlog,InetAddress bindAddr)创建、监听示意代码创建、监听示意代码 ServerSocket serverSocket=null;try serverSocket=new ServerSocket(6666);catch(IOException e)System.exit(1);Socket clientSocket=null;try clientSocket=serverSocket.accept();catch(IOException e)System.exit(1);提供在6666端口上的侦听服务accept()方法是一个阻塞式方法,直到收到一个连接请求后,程序将会继续运行下去clientSocket对应于客户端的socket,获得后可以利用它和客户端通信表表11-1 ServerSocket类的主要方法类的主要方法accept()accept()侦侦听并接受到此套接字的听并接受到此套接字的连连接接bind(SocketAddress bind(SocketAddress endpoint)endpoint)将将 ServerSocket ServerSocket 绑绑定到特定地址(定到特定地址(IP IP 地址和端口号)地址和端口号)close()close()关关闭闭此套接字此套接字getChannel()getChannel()返回与此套接字关返回与此套接字关联联的惟一的惟一 ServerSocketChannel ServerSocketChannel 对对象(如果有)。象(如果有)。getInetAddress()getInetAddress()返回此服返回此服务务器套接字的本地地址器套接字的本地地址getLocalPort()getLocalPort()返回此套接字在其上返回此套接字在其上侦侦听的端口听的端口getLocalSocketAddrgetLocalSocketAddress()ess()返回此套接字返回此套接字绑绑定的端点的地址,如果尚定的端点的地址,如果尚未未绑绑定定则则返回返回 nullnullisClosed()isClosed()返回返回 ServerSocket ServerSocket 的关的关闭闭状状态态14.2.3 14.2.3 创建客户端创建客户端Socket Socket 作用u连接到服务器socket,以便通信构造函数uSocket(InetAddress address,int port);uSocket(String host,int prot);uSocket(String host,int port,InetAddress localAddr,int localPort)uSocket(InetAddress address,int port,InetAddress localAddr,int localPort)客户端访问服务器客户端访问服务器Socket client=null;try client=new Socket(127.0.0.1,6666);/client=new Socket(,6666);catch(UnknownHostException e)System.exit(1);catch(IOException e)System.exit(1);/此处可以添加通信代码此处可以添加通信代码client.close();希望连接的服务器所在主机地址希望连接的服务器程序监听端口表表11-2 Socket类的主要方法类的主要方法bind(SocketAddress bind(SocketAddress endpoint)endpoint)将将 套套节节字字绑绑定到特定地址(定到特定地址(IP IP 地址和端口号)地址和端口号)close()close()关关闭闭此套接字此套接字getLocalPort()getLocalPort()返回此套接字在其上返回此套接字在其上侦侦听的端口听的端口getInputStream()getInputStream()返回此套接字的返回此套接字的输输入流入流,来自来自对对端的端的输输出出getOutputStream()getOutputStream()返回此套接字的返回此套接字的输输出流,可以向出流,可以向对对端端输输出数据出数据getInetAddress()getInetAddress()返回此套接字返回此套接字连连接的地址接的地址getPort()getPort()返回此套接字返回此套接字连连接到的接到的远远程端口程端口getRemoteSocketAddress()getRemoteSocketAddress()返回此套接字返回此套接字连连接的端点的地址,如果未接的端点的地址,如果未连连接接则则返返回回 nullnullisClosed()isClosed()返回返回 套套节节字的关字的关闭闭状状态态14.2.4 14.2.4 通信过程通信过程在上面创建服务器端和客户端Socket的过程中,两端都需要一个Socket对象。双方的通信就是利用Socket对象所提供的输入输出流完成双方的数据传输,这时通信过程就变成了I/O流的输入输出过程,不过这里的数据源分别是对端的Socket对象。一端socket向自己输出流输出信息,对端socket利用自己的输入流可以接收。获得一个获得一个socketsocket的的I/OI/O流流每个Socket实例均有一对输入输出流用来和对方进行通信,socket的通信就是流的输入和输出BufferedReader in=null;PrintWriter out=null;out=new PrintWriter(client.getOutputStream(),true);in=new BufferedReader(new InputStreamReader(client.getInputStream();一个一个SocketSocket向另一个发送信息向另一个发送信息发送方:out=new PrintWriter(client.getOutputStream(),true);/组织发送信息组织发送信息String req=“hello;out.println(req);接收方:in=new BufferedReader(new InputStreamReader(client.getInputStream()String info=null;info=in.readLine();讨论:讨论:1.通信双方如何做到有序通信通信双方如何做到有序通信?2.除了字符串,还可以传输其他类型吗,如何实现?除了字符串,还可以传输其他类型吗,如何实现?一个多线程服务器的创建一个多线程服务器的创建/以下是端口申请成功后,程序开始服务以下是端口申请成功后,程序开始服务Socket clientSocket=null;/声明一个对应于特定客户端声明一个对应于特定客户端的的socket对象变量对象变量boolean working=true;while(working)try clientSocket=serverSocket.accept();Processor p=new Processor(clientSocket);p.start();catch(IOException e)System.err.println(建立和客户端的连接时失败建立和客户端的连接时失败.);System.exit(1);利用一个循环实现无休止的监听14.2.514.2.5关闭连接关闭连接每一个Socket存在时,都将占用一定的资源,在Socket对象使用完毕时,要其关闭。关闭Socket可以调用Socket的Close()方法。在关闭Socket之前,应将与Socket相关的所有的输入/输出流全部关闭,以释放所有的资源。而且要注意关闭的顺序,与Socket相关的所有的输入/输出该首先关闭,然后再关闭Socket。uos.close();/关闭输出流uis.close();/关闭输出流usocket.close();/关闭socket 14.2.6 Socket14.2.6 Socket异常异常SocketException BindException ConnectException NoRouteToHostException InterruptedIOException 14.2.7 14.2.7 传输对象传输对象对象在网络上的传输和前面的传输最大的不同有两点:u对象必须是可串行化的。u用ObjectOutputStream和ObjectInputStream向字节流输入对象或读出发来的对象。u由于Socket的通信是建立在双方的同步基础之上的,因此在进行非基础对象的传输时,需要保证通信两端构造流的顺序必须按照相反的顺序构造。in=new ObjectInputStream(clientSocket.getInputStream();out=new ObjecOutputStream(clientSocket.getOutputStream();Object obj=in.readObject();out.writeObject(new Date();14.3 14.3 基于基于UDPUDP的网络编程的网络编程1 什么是Datagram uDatagramPacket数据报包用来实现无连接包投递服务。每条报文仅根据该包中包含的信息从一台机器路由到另一台机器。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。不对包投递做出保证。DatagramSocketDatagramSocketDatagramSocket的构造方法DatagramSocket();();DatagramSocket(int prot);DatagramSocket(int port,InetAddress laddr)DatagramSocket的作用用于在程序之间建立传送数据报的通信连接,DatagramPacketDatagramPacketDatagramPacket(byte buf,int length););DatagramPacket(byte buf,int length,InetAddress addr,int port);DatagramPacket(byte buf,int offset,int length);DatagramPacket(byte buf,int offset,int length,InetAddress address,int port);DatagramPacketDatagramPacket的构造方法的构造方法 DatagramPacketDatagramPacket的构造方法的构造方法DatagramPacket则用来表示一个数据报。另外,DatagramPacket也可以被发送到多播组MulticastSocket,该主机和端口的所有预定接收者都将接收到消息。14.3.2 14.3.2 通信过程通信过程1 接信前的准备在接收数据前,应该采用上面的第一种方法生成一个DatagramPacket对象,给出接收数据的缓冲区及其长度。然后调用DatagramSocket 的方法receive()等待数据报的到来,receive()将一直等待,直到收到一个数据报为止(这也是一种阻塞方式)。DatagramPacket packet=new DatagramPacket(buf,256);Socket.receive(packet);2 发信前的准备发送数据前,也要先生成一个新的DatagramPacket对象,这时要使用上面的第二种构造方法,在给出存放发送数据的缓冲区的同时,还要给出完整的目的地址,包括IP地址和端口号。发送数据是通过DatagramSocket的方法send()实现的,send()根据数据报的目的地址来寻径,以传递数据报。DatagramPacket packet=new DatagramPacket(buf,length,address,port);Socket.send(packet);3 拆信当收到一封来信数据报时,可以通过拆信获得信的内容、来信地址和端口信息。例如:/获得用于接收数据的缓冲区获得用于接收数据的缓冲区public byte getData();/返回发出数据报的某台机器的返回发出数据报的某台机器的 IP 地址地址public InetAddress getAddress();/返回发出数据报的某台机器的端口返回发出数据报的某台机器的端口public int getPort();14.4 14.4 基于基于URLURL的网络编程的网络编程1 什么是URL?uURL(Uniform Resource Locator)是一致资源定位器的简称,它表示Internet上某一资源的地址。u通过URL我们可以访问Internet上的各种网络资源,比如最常见的WWW,FTP站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其他资源。2 URL的组成uhttp:/这是一个典型的URL组成。一个完整的URL包括:uprotocol:/host:port/fileu协议名(protocol)指明获取资源所使用的传输协议,如http、ftp、gopher、file等。uhost则指文件所在的主机服务器,如。uport则是提供该项服务的应用(如http、ftp等)所提供的访问端口,例如默认的http服务端口是80,可以省略,ftp服务的默认端口在23,也可以省略。ufile特指一个在指定主机上的包括路径的文件名或文件内部的一个引用。例如:http:/ 协议名:/机器名文件名http:/:80/Gamelan/network.html#BOTTOM u协议名:/机器名端口号文件名内部引用。file:/localhost/c:/mydoc/week_diary.htmlu协议名:/机器名文件名14.4.2 14.4.2 资源访问技术资源访问技术1 创建一个URL 构造函数构造函数1:public URL(String spec);通过一个表示通过一个表示URL地址的字符串可以构造一个地址的字符串可以构造一个URL对象。对象。URL urlBase=new URL(http:/ URL(URL context,String spec);通过在指定的上下文中对给定的通过在指定的上下文中对给定的 spec 进行解析创建进行解析创建 URL。URL urlBase=new URL(http:/ index=new URL(urlBase,index.html)构造函数构造函数3:public URL(String protocol,String host,String file);URL url=new URL(http,/pages/index.html);构造函数构造函数4:public URL(String protocol,String host,int port,String file);URL url=new URL(http,80,pages/index.html);异常tryURL myURL=new URL()catch(MalformedURLException e)/exception handler code here 2 解析一个URL upublic String getProtocol()获取该URL的协议名。upublic String getHost()获取该URL的主机名。upublic int getPort()获取该URL的端口号,如果没有设置端口,返回-1。upublic String getFile()获取该URL的文件名。upublic String getRef()获取该URL在文件中的相对位置。upublic String getQuery()获取该URL的查询信息。upublic String getPath()获取该URL的路径upublic String getAuthority()获取该URL的权限信息upublic String getUserInfo()获得使用者的信息upublic String getRef()获得该URL的锚 3 从URL读取WWW网络资源当得到一个URL对象后,就可以通过它读取指定的WWW资源。这时应当使用URL的方法openStream(),其定义为:uInputStream openStream();方法openSteam()与指定的URL建立连接并返回InputStream类的对象以从这一连接中读取数据。代码片段代码片段URL file;/定义一个网上资源,指向新浪网的默认主页定义一个网上资源,指向新浪网的默认主页file=new URL(http:/);/获得资源的输出流,转化为文本流获得资源的输出流,转化为文本流in=new BufferedReader(new InputStreamReader(file.openStream();String line;while(line=in.readLine()!=null)System.out.println(line);in.close();作业作业习题2 2,3 3,5 5实验:6 6,7 7,8 8选做做实验:9 9

    注意事项

    本文(Java程序设计-14-网络编程.ppt)为本站会员(qwe****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开