《Java程序设计》课件-javacp13网络编程_第1页
《Java程序设计》课件-javacp13网络编程_第2页
《Java程序设计》课件-javacp13网络编程_第3页
《Java程序设计》课件-javacp13网络编程_第4页
《Java程序设计》课件-javacp13网络编程_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十三章网络编程

Java程序设计本章主要内容

网络编程基本知识URL编程Socket编程UDP编程小结2024/12/24李飞——计算中心2/30网络编程的基本知识1.TCP协议。TCP协议称为传输控制协议,它的主要功能是在端点与端点之间建立持续的连接而进行通信。2.UDP协议。UDP协议称为用户数据报协议,在利用UDP传输时,需要将传输的数据定义成数据报(Datagram),在数据报中指明数据所要到达的端点,然后再将数据报发送出去。3.IP协议。IP协议规定每台连入Internet的主机必须具备一个唯一的地址,以此来识别主机在网络中的位置。4.DNS。DNS称为域名系统,把用户难记的IP地址转换为相对有意义的域名。域名有一定的结构,一般形式如下:主机名.组织名.组织类型名.顶级域名2024/12/24李飞——东北大学秦皇岛分校计算中心3/35网络编程基本知识Socket。Socket通常被称作“套接字”,它是一个通信链的句柄,用于处理数据的接收与发送。端口。在网络通信过程中,IP地址和端口号为应用程序提供了一种确定的地址标识,IP地址标识Internet上的计算机,而端口号表明将数据包发送给目的计算机上哪个应用程序。每个Socket都有其对应的端口号,端口号是一个16位的二进制整数,其范围为0~65535,其中0~1023为系统所保留,专门用于那些通用的网络服务服务器和客户机。在网络中,为其他计算机提供数据、信息或服务的计算机被称为服务器。使用其他计算机的数据、信息或服务的计算机被称为客户机。2024/12/24李飞——东北大学秦皇岛分校计算中心4/35与网络编程相关的类2024/12/24李飞——东北大学秦皇岛分校计算中心5/35DatagramPacketDatagramSocketInetAddressInet4AddressInet6AddressServerSocketSocketURLURLConnectionHttpURLConnectionURLEncoder常见的网络编程模式URL通信模式。利用URL类和URLConnection类进行网络上数据信息的输入和输出,面向应用层协议编程。Socket通信模式。利用ServerSocket和Scoket类,通过传输层的TCP协议,实现网络上两个节点之间的通信。Datagram通信模式。使用DatagramSocket、DatagramPacket、MulticastSocket类,面向传输层的UDP协议编程,实现通信。2024/12/24李飞——东北大学秦皇岛分校计算中心6/35URL编程URL格式协议名://主机名[:端口号[路径/文件名]]协议名:指明获得资源所使用的传输协议,如http、ftp、file、gopher等。主机名:指文件所在的计算机的域名或IP地址,如。端口号:指提供服务的应用所提供的访问端口,例如http服务端口默认为80,FTP服务的默认端口为21。2024/12/24李飞——东北大学秦皇岛分校计算中心7/35路径/文件名:指资源在主机上的路径和文件名组成的一个内部引用。如URL地址/2017/12/09/VIDEkA16AVXeFxGucgx7bwjw171209.shtml中的“路径/文件名”是“/2017/12/09/VIDEkA16AVXeFxGucgx7bwjw171209.shtml”说明文件“VIDEkA16AVXeFxGucgx7bwjw171209.shtml”保存在主机根目录下的“/2017/12/09”路径下。在Java中我们通常把“路径+文件名“统称为文件名。2024/12/24李飞——东北大学秦皇岛分校计算中心8/35InetAddress类

InetAddress类是个抽象类,提供将主机名解析为其IP地址(或反之)的方法。InetAddress类没有构造方法,要创建InetAddress类的实例对象,通常可以使用InetAddress类的静态方法来构造。如使用如下语句创建一个InetAddress实例。byte[]addr={118,16,92,12};InetAddressinteradd=InetAddress.getByAddress(addr);2024/12/24李飞——东北大学秦皇岛分校计算中心9/35InteAddress类的类方法方法说明getAllByName(Stringhost)在给定主机名的情况下,根据系统配置的名称服务返回其IP地址所组成的数组。getByAddress(byte[]addr)根据IP地址创建InetAddress对象。getByAddress(Stringhost,byte[]addr)根据主机名和IP地址创建InetAddress。getByName(Stringhost)根据主机确定主机的InteAddress。getLocalHost()返回本地主机的InteAddress。2024/12/24李飞——东北大学秦皇岛分校计算中心10/35InteAddress类的常用成员方法方法说明getAddress()返回此InetAddress对象的原始IP地址。getCanonicalHostName()获取此IP地址的完全限定域名。getHostAddress()返回IP地址字符串(以文本表现形式)。getHostName()获取此IP地址的主机名。getLocalHost()返回本地主机。toString()将此IP地址转换为String。2024/12/24李飞——东北大学秦皇岛分校计算中心11/35例13.1:判定192.168.1网段中哪些计算机是活动的。import.*;importjava.io.*;publicclasseg1301{publicstaticvoidmain(String[]args)throwsUnknownHostException{ Stringip=null; for(inti=100;i<=150;i++){ ip="192.168.1."+i; try{ InetAddresshost; host=InetAddress.getByName(ip); if(host.isReachable(1000)){ Stringhostname=host.getHostName(); System.out.println("IP地址"+ip+"的主机名称是:"+hostname);

} }catch(IOExceptione){e.printStackTrace();}

}}}2024/12/24李飞——东北大学秦皇岛分校计算中心12/35URL类URL类的常用构造方法2024/12/24李飞——东北大学秦皇岛分校计算中心13/35方法说明URL(Stringspec)根据String表示形式创建URL对象。URL(Stringprotocol,Stringhost,intport,Stringfile)根据协议名、主机名、端口号和文件名创建URL对象。URL(Stringprotocol,Stringhost,Stringfile)根据协议名称、主机名称和文件名称创建URL。URL(URLcontext,Stringspec)通过给定的spec对指定的上下文解析创建URL。因为URL表示的网络资源,在Internet上并不一定存在,所以使用URL构造方法创建URL对象时,除URL(Stringspec)方法外,其他的构造方法都会产生一个.MalformedURLException的异常对象,所以在使用其他构造方法时要注意对该异常的进行处理。2024/12/24李飞——东北大学秦皇岛分校计算中心14/35例采用URL(Stringspec)方法。URLurl=newURL("");采用URL(Stringprotocol,Stringhost,intport,Stringfile)方法。URLurl2=newURL("http","",80,"Pages/Gwork.html");采用URL(Stringprotocol,Stringhost,Stringfile)方法。URLurl3=newURL("http","","/pages/G.html");采用URL(URLcontext,Stringspec)方法。URLurl4=newURL(url,"/index.html?usrname=lqq#test");2024/12/24李飞——东北大学秦皇岛分校计算中心15/35URL类的常用实例方法(例13.2)方法说明getContent()获取URL的内容。getDefaultPort()获取与URL关联协议的默认端口号。getFile()获取URL的文件名。getHost()获取URL的主机名。getPath()获取URL的路径部分。getPort()获取URL的端口号。getProtocol()获取URL的协议名称。getQuery()获取URL的查询部分。toURI()返回与URL等效的URI。toString()构造URL的字符串表示形式。openStream()打开到URL的连接并返回一个用于从该连接读入的InputStream。openConnection()返回一个URLConnection对象,它表示到URL所引用的远程对象的连接。openConnection(Proxyproxy)与openConnection()类似,所不同是连接通过指定的代理建立;不支持代理方式的协议处理程序将忽略该代理参数并建立正常的连接。set(Stringprotocol,Stringhost,intport,Stringfile,Stringref)设置URL的字段。protocol是协议名,host是主机名,port是端口号,file是资源文名,ref是URL中的内部引用名。2024/12/24李飞——东北大学秦皇岛分校计算中心16/35URLConnection类使用URLConnection对象的一般方法如下:1)创建一个URL对象。2)调用URL对象的openConnection()方法创建这个URL的URLConnection对象。3)配置URLConnection。4)读首部字段。5)获取输入流并读数据。6)获取输出流并写数据。7)关闭连接。2024/12/24李飞——东北大学秦皇岛分校计算中心17/35URLConnection类的常用方法(例13.3)方法说明getContentType()获取文件类型。getContentLength()获取文件长度。getDate()获取文件创建时间。getLastModified()获取文件最后修改时间。getExpiration()获取文件过期时间。getURL()获取连接的URL。getContent()获取连接的内容。getInputStream()获取连接的输入流getOutputStream()获取连接的输出流2024/12/24李飞——东北大学秦皇岛分校计算中心18/35socket编程用Socket实现通信的S/C模型2024/12/24李飞——东北大学秦皇岛分校计算中心19/35Socket构造方法创建未连接套接字。Socket()创建一个连接到指定IP地址和端口的套接字。Socket(InetAddressaddress,intport) 创建一个连接到指定地址上的指定端口的套接字。Socket(InetAddressaddress,intport,InetAddresslocalAddr,intlocalPort)创建一个指定主机和端口号的套接字。Socket(Stringhost,intport)创建一个指定远程主机上的指定远程端口的套接字。Socket(Stringhost,intport,InetAddresslocalAddr,intlocalPort)2024/12/24李飞——东北大学秦皇岛分校计算中心20/35Socket类的常用实例方法bind(SocketAddressbindpoint)将套接字绑定到本地地址。getInetAddress()返回套接字连接的地址。getPort()返回套接字连接到的远程端口。getLocalPort()返回套接字绑定到的本地端口。getLocalAddress()获取套接字绑定的本地地址。getInputStream()返回套接字的输入流。getOutputStream()返回套接字的输出流。connect(SocketAddressendpoint)将套接字连接到服务器。connect(SocketAddressendpoint,inttimeout)将套接字连接到服务器,并指定一个超时值。close()关闭套接字。2024/12/24李飞——东北大学秦皇岛分校计算中心21/35举例例13.4:编写一个端口扫描器程序,探测一台主机中开放的端口。解析:我们首先定义一个构造方法用于设置被扫描的主机,然后定义一个start()方法完成扫描操作。在start()方法中首先建立一个产生端口号的循环,在循环中为每个端口号创建端口对象,如果能够成功建立,则说明这个端口开放,如果抛出异常UnknownHostException则说明本机无法识别目标主机,如果抛出异常IOException说明该端口未开放。代码见教材例13.42024/12/24李飞——东北大学秦皇岛分校计算中心22/35ServerSocket类利用ServerSocket可以开发服务器程序。ServerSocket类包含了实现一个服务器要求的所用功能。ServerSocket类的工作流程

在指定的监听端口创建一个ServerSocket类的对象S。调用对象S的accept()方法在指定的端口监听到来的连接,并通过accept()获取连接客户端与服务器的Socket对象。调用getInputStream()方法和getOutputStream()方法获得Socket对象的输入流和输出流。服务器与客户端根据一定的协议交互数据,直到一端请求关闭连接。服务器和客户端关闭连接。服务器回到第2步,继续监听下一次的连接,而客户端运行结束。2024/12/24李飞——东北大学秦皇岛分校计算中心23/35ServerSocket类的常用构造方法2024/12/24李飞——东北大学秦皇岛分校计算中心24/35ServerSocket()创建非绑定服务器套接字。ServerSocket(intport)创建一个绑定到指定端口的服务器套接字。ServerSocket(intport,intbacklog)创建服务器套接字,将其绑定到指定的本地端口号,并指定传入连接队列长度为backlog。ServerSocket(intport,intbacklog,InetAddressbindAddr)创建服务器套接字,指定其端口、连接队列长度backlog和绑定的服务器IP地址ServerSocket类的常用实例方法方法说明accept()侦听并接受到此套接字的连接。bind(SocketAddressendpoint)将ServerSocket绑定到特定地址(IP地址和端口号)。bind(SocketAddressendpoint,intbacklog)设定侦听队列长度backlog且将ServerSocket绑定到特定地址。close()关闭套接字。getInetAddress()返回服务器套接字的本地地址。getLocalPort()返回套接字在其上侦听的端口。getLocalSocketAddress()返回套接字绑定的端点的地址,如果尚未绑定则返回null。2024/12/24李飞——东北大学秦皇岛分校计算中心25/35例13.6用ServerSocket实现时间服务器。importjava.io.*;import.*;importjava.util.*;publicclasseg13_6implementsRunnable{ intport; publiceg13_6(){ this(37);//设置时间服务器端口 } publiceg13_6(intport){ this.port=port; }2024/12/24李飞——东北大学秦皇岛分校计算中心26/35publicvoidrun(){ try{

//创建服务器套接字 ServerSocketserver=newServerSocket(port); while(true){//轮流处理多个客户端请求 Socketconn=null; try{conn=server.accept();//等待客户端请求

Datenow=newDate();//生成系统时间

longnetTime=now.getTime()/1000+2208988800L;

byte[]time=newbyte[4];

for(inti=0;i<4;i++){

time[3-i]=(byte)(netTime&0x00000000000000FFL);

netTime>>=8; }//获取套接

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论