java核心技术.ppt

上传人:s****8 文档编号:82763707 上传时间:2023-03-26 格式:PPT 页数:40 大小:1.27MB
返回 下载 相关 举报
java核心技术.ppt_第1页
第1页 / 共40页
java核心技术.ppt_第2页
第2页 / 共40页
点击查看更多>>
资源描述

《java核心技术.ppt》由会员分享,可在线阅读,更多相关《java核心技术.ppt(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、JAVA核心技术网络通讯2网络通讯网络通讯Java提供java.io包进行io操作Java提供将对象序列化的方法将对象持久化或者通过网络传输3本章相关词汇本章相关词汇单 词说 明Internet Protocol(IP)互联网协议互联网协议net网络,网状物网络,网状物socket套接字,插座套接字,插座server服务器,服务端服务器,服务端client客户,客户端客户,客户端port端口端口accept接收,认可接收,认可4网络通讯网络通讯网络基础知识IP地址与端口包InetAddressSocketServerSocketUDPURL扩展IO流的相关知识5网络通讯网络通讯包InetAdd

2、ressSocketServerSocket6计算机网络与通信计算机网络与通信通信是人类生活中最重要的需求之一;通信是指:对语言、文字、声音和图片以及其它任何类型的相关数据进行传输;计算机的出现以及网络的构成,使得数据通信更加快速有效。7网络原理网络原理网络就是一组连接在一起的计算机。使用网卡、电缆、集线器等连接设备连接计算机以组成网络。8客户端客户端/服务器模式服务器模式网络发展,促使客户端/服务器模式应运而生;通过网络,向另一台计算机请求服务的计算机称为客户端,而处理请求的计算机称为服务器;如数据服务器,需要数据的客户端机器向数据服务器提出请求,而服务器则处理客户端的请求并向其发送所需的数

3、据;客户端/服务器的优势在于:服务器和客户端分摊任务,分别负责部分处理工作;服务器可以同时为多台客户端服务;多个客户端可以同时访问服务器上的相同数据。9IPIP地址地址网络中有多台计算机,它们必须通过某种标识来区分每一台机器,这就是IP地址;IP地址由4个字节共32位二进制数组成,类似于:192.168.0.8;在网络寻找某一台计算机都是依靠它的IP地址(用域名或计算机名定位主机其实也是通过某种服务转成IP地址后再找到该主机的);网络ID:网络ID标识了计算机或网络设备所在的网段;主机ID:主机ID标识了特定的主机或网络设备10特殊特殊IPIP地址地址许多网络地址被保留用于特殊用途;0.0.0

4、.0和127.0.0.1就是两个此类地址,第一个称为缺省路由,后一个是环回地址;127.0.0.1被保留用于用户主机的本地IP话务,它被分配给一个特殊接口,即起到闭合电路作用的环回接口。11端口端口在一台物理性的计算机中,往往运行着多个网络程序,一个IP地址并不足以完整标识一个服务器,因此,端口是机器内部独一无二的场所;一台计算机上可能同时运行多个网络程序,IP地址只能确保把数据送到指定的计算机,但不能保证把这些数据传递给哪个网络程序;端口使用一个16位的数字来表示,它的范围是065535,1024以下的端口号保留给预定义的服务,如:http使用80端口;网络间通信其实是在网络应用程序端口之间

5、进行的。包包使用包可以实现Java的网络功能,其中包含了一系列与网络通讯相关的类,比较重要的有:InetAddressSocketServerSocket如果要进行网络通讯编程的话,必须导入此包。.InetA.InetAddressInetAddress用来表示互联网协议(IP)地址,它的实例将IP地址和DNS(主机名解析)进行了封装;该类无法直接实例化,只能通过下列静态工厂方法获得实例:方 法 原 型说 明static InetAddress getByName(String host)throws UnknownHostException在给定主机名的情况下确定主机的在给定主机名的情况下确

6、定主机的 IP 地址地址static InetAddress getLocalHost()throws UnknownHostException返回本地主机的返回本地主机的InetAddress对象对象static InetAddress getByAddress(byte address)throws UnknownHostException在给定原始在给定原始 IP 地址的情况下,返回地址的情况下,返回 InetAddress 对象对象static InetAddress getAllByName(String host)throws UnknownHostException在给定主机名的

7、情况下,根据系统上配置的名称服务返在给定主机名的情况下,根据系统上配置的名称服务返回其回其 IP 地址所组成的数组地址所组成的数组14InetAddressInetAddress示例示例import .*;/导入包public class InetAddressDemo public static void main(String args)try /获得当前本地主机的IP地址 InetAddress add1=InetAddress.getLocalHost();System.out.println(当前本地主机:+add1);/根据域名,通过DNS域名解析,获得相应服务的主机地址 Inet

8、Address add2=InetAddress.getByName();System.out.println(网易服务器主机:+add2);/根据字符串表现形式的IP地址获得相应的主机地址(若果网络上有该IP地址的话)InetAddress add3=InetAddress.getByName(192.168.0.22);System.out.println(IP地址为192.168.0.22的主机:+add3);/根据机器名获得相应的主机地址(如果网络上有该机器名的话)InetAddress add4=InetAddress.getByName(J104);System.out.print

9、ln(机器名为J104的主机:+add4);catch(UnknownHostException uhe)uhe.printStackTrace();15InetAddressInetAddress的其它方法的其它方法方 法 原 型说 明byte getAddress()返回此返回此 InetAddress 对象的原始对象的原始 IP 地址地址String getHostAddress()返回此返回此 InetAddress 对象的对象的IP地址字符串地址字符串String getHostName()返回此返回此 InetAddress 对象的主机名称对象的主机名称boolean equals

10、(Object other)判断两个判断两个IP地址是否相等地址是否相等String toString()返回此返回此 InetAddress 对象的字符串表现形式(主机名对象的字符串表现形式(主机名/IP地址)地址)16套接字套接字网络上计算机通过TCP/IP协议进行通信,而套接字(socket)则将这些通信协议进行了封装;TCP/IP套接字用于在主机和Internet之间建立可靠的、双向的、持续的、点对点的流式连接;socket用于描述IP地址和端口,应用程序通过套接字向网络发出请求或者应答网络请求;也就是说,套接字起到通信端点的作用;客户端和服务器通过套接字建立连接和通信。17主机甲套接

11、字通信原理套接字通信原理A程序主机乙B程序TCP/IP协议网 卡网络管理软件socketsocket主机甲上的A程序将一段数据写入socket中 主机乙上的B程序从socket中读取这段数据 .S.SocketSocket类用于创建套接字对象,其构造方法共有9种重载,常用的有如下几种:套接字会因为网络的连接中断而失效,所以对它的操作都有可能抛出IOException构 造 方 法说 明Socket(InetAddress address,int port)throws IOException用预先存在的用预先存在的InetAddress对象和端口创建一个与本地主机对象和端口创建一个与本地主机连

12、接的套接字连接的套接字Socket(String hostName,int port)throws UnknownHostException,IOException创建一个本地主机与给定名称的主机和端口连接的套接字创建一个本地主机与给定名称的主机和端口连接的套接字19SocketSocket的常用方法的常用方法一旦Socket对象被成功创建,就可以获得访问与之相关的输入/输出流的权力,通过流操作从套接字中发送(输出)和接收(输入)数据:方 法 原 型说 明InputStream getInputStream()throws IOException获得当前套接字的输入流获得当前套接字的输入流Ou

13、tputStream getOutputStream()throws IOException获得当前套接字的输出流获得当前套接字的输出流void close()throws IOException关闭当前套接字关闭当前套接字20SocketSocket的其它方法的其它方法使用下面的方法,可以在任何时候检查套接字的地址和与之相关的端口信息:方 法 原 型说 明InetAddress getInetAddress()返回与当前套接字连接的远程主机的返回与当前套接字连接的远程主机的InetAddress对象,如果未对象,如果未连接,则返回连接,则返回nullint getPort()返回与当前套接字

14、连接的远程主机端口返回与当前套接字连接的远程主机端口InetAddress getLocalAddress()返回与当前套接字绑定的本地主机的返回与当前套接字绑定的本地主机的InetAddress对象对象int getLocalPort()返回与当前套接字绑定的本地主机端口返回与当前套接字绑定的本地主机端口.ServerS.ServerSocketServerSocket类用来创建服务器套接字,它监听本地或远程客户程序通过公共端口的连接;ServerSocket类有4个重载的构造方法,以下是常用的:ServerSocket的常用方法如下:构 造 方 法说 明ServerSocket(int p

15、ort)throws IOException创建服务套接字,它负责侦听由创建服务套接字,它负责侦听由port指定的端口指定的端口方 法 原 型说 明Socket accept()throws IOException等待并侦听来自客户端的请求,一旦接收到,返回一个等待并侦听来自客户端的请求,一旦接收到,返回一个与客户进行通信的与客户进行通信的Socketvoid close()throws IOException关闭当前服务器套接字关闭当前服务器套接字22SocketSocket编程编程编写服务器端程序:创建一个服务器套接字(ServerSocket),绑定到指定端口;调用accept方法,侦听

16、来自客户端的请求,如果客户发出请求,则接受连接,返回通信套接字(Socket);调用Socket的getInputStream和getOutputStream方法,获得输入/输出流,开始网络数据的接收和发送;关闭通信套接字,关闭服务器套接字。23SocketSocket编程编程编写客户端程序:创建一个套接字(Socket),向服务器的侦听端口发出请求;与服务器正确连接后,调用Socket的getInputStream和getOutputStream方法,获得输入/输出流,开始网络数据的接收和发送;关闭通信套接字。24ClientServerSocketSocket编程示意图编程示意图Serve

17、rSocket(int port)InputStream getInputStream()OutputStream getOutputStream()close()close()InputStream getInputStream()OutputStream getOutputStream()Socket(InetAddress address,int port)Socket accept()25示例(服务端)示例(服务端)public class Server private static final int SERVER_PORT=9001;/指定侦听端口 public Server()t

18、ry ServerSocket ss=new ServerSocket(SERVER_PORT);/创建服务器套接字 System.out.println(服务端已启动,正在等待客户端.);Socket s=ss.accept();/侦听来自客户端的请求 InputStream in=s.getInputStream();/获得输入流,用来接收数据 OutputStream out=s.getOutputStream();/获得输出流,用来发送数据 byte buf=new byte1024;int len=in.read(buf);/从输入流中读取数据 String strFromClien

19、t=new String(buf,0,len);System.out.print(来自客户端的信息);System.out.println(strFromClient);String strToClient=我也很好!;out.write(strToClient.getBytes();/往输出流中发送数据 in.close();out.close();/关闭输入流和输出流 s.close();ss.close();/关闭通信套接字和服务器套接字 System.out.println(服务端已关闭。);catch(IOException ioe)ioe.printStackTrace();pub

20、lic static void main(String args)new Server();26示例(客户端)示例(客户端)public class Client private static final int SERVER_PORT=9001;/服务器的侦听端口 public Client()try /由于服务端也是运行在本机,所以创建本机的InetAddress对象 InetAddress address=InetAddress.getByName(localhost);Socket s=new Socket(address,SERVER_PORT);/向服务器侦听端口发出请求 Syst

21、em.out.println(客户端已启动。);InputStream in=s.getInputStream();/获得输入流,用来接收数据 OutputStream out=s.getOutputStream();/获得输出流,用来发送数据 String strToServer=你好!;out.write(strToServer.getBytes();/往输出流中发送数据 byte buf=new byte1024;int len=in.read(buf);/从输入流中读取数据 String strFromServer=new String(buf,0,len);System.out.pr

22、int(来自服务端的回答);System.out.println(strFromServer);in.close();out.close();/关闭输入流和输出流 s.close();/关闭通信套接字 System.out.println(客户端已关闭。);catch(UnknownHostException nhe)System.out.println(未找到指定主机.);catch(IOException ioe)ioe.printStackTrace();public static void main(String args)new Client();UDPUDP用数据报方式编写clie

23、nt/server程序时,无论在客户方还是服务方,首先都要建立一个DatagramSocket对象,用来接收或发送数据报,然后使用DatagramPacket类对象作为传输数据的载体UDPUDP接收端程序编写:调用DatagramSocket(int port)创建一个数据报套接字,并绑定到指定端口上;调用DatagramPacket(byte buf,int length),建立一个字节数组以接收UDP包。调用DatagramSocket类的receive(),接收UDP包。最后关闭数据报套接字。UDPUDP发送端程序编写:调用DatagramSocket()创建一个数据报套接字;调用Dat

24、agramPacket(byte buf,int offset,int length,InetAddress address,int port),建立要发送的UDP包调用DatagramSocket类的send(),发送UDP包。最后关闭数据报套接字。TCPTCP与与UDPUDP的区别的区别UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。与TCP不同,UDP协议并不提供数据传送的保证机制

25、。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。TCPTCP与与UDPUDP的区别的区别相对于TCP协议,UDP协议的另外一个不同之处在于如何接收突法性的多个数据报。不同于TCP,UDP并不能确保数据的发送和接收顺序。URLURLURL(Uniform Resource Locator)-统一资源定位器,表示Internet上某一资源的地址。URL组成:协议名和资源名protocol:resourceNameURL举例:http:/http:/ftp:/URLURL类类常用构造方法public URL(St

26、ring spec);例如:URL u1=new URL(“http:/ URL(URL context,String spec);例如:URL u2=new URL(u1,“welcome.html”);public URL(String protocol,String host,String file);例如:URL u3=new URL(“http”,“”,“developers/index.html”);public URL(String protocol,String host,int port,String file);例如:URL u4=new URL(“http”,“”,80,

27、“developers/index.html”);URLURL实例实例public class URLConnectionReader public static void main(String args)throws Exception URL yahoo=new URL(http:/ yc=yahoo.openConnection();BufferedReader in=new BufferedReader(new InputStreamReader(yc.getInputStream();String inputLine;while(inputLine=in.readLine()!=n

28、ull)System.out.println(inputLine);in.close();35关于关于IOIO流流在两台主机之间通过socket建立握手连接之后,主要是通过输入/输出流来接收和发送数据,实际上,对于网络的操作,绝大部分是在操作IO流;实际上操作网络端口流与操作磁盘文件流的原理是相似的;出于效率的考虑,socket使用的是字节流,但是在实际操作中,字节往往会带来不便,所以我们一般会把字节流改造成字符流后进行操作。36改写示例(代码片段)改写示例(代码片段)public class Client /改用字符流的方式收发网络数据 Socket s=new Socket(address

29、,SERVER_PORT);InputStream is=s.getInputStream();InputStreamReader isr=new InputStreamReader(is);BufferedReader in=new BufferedReader(isr);OutputStream os=s.getOutputStream();PrintWriter out=new PrintWriter(os,true);out.println(strToServer);String strFromServer=in.readLine();out.close();in.close();37

30、网络通讯网络通讯网络的发展促使计算机之间的通信日趋重要;网络上的计算机通过IP地址来区分不同的机器,端口是数据的通道,使得多个应用程序在同一主机上进行网络通信;InetAddress用来描述主机地址;Socket用来创建两台主机之间的连接;ServerSocket用来侦听来自客户端的请求;我们实际上是通过操作IO流来进行数据的收发工作,将字节流改造成字符流会使操作更加方便。网络通讯中,端口有什么含义。端口的取值范围?端口是一个主机中不同应用程序的标识,它是一个编号,CPU将根据这个编号决定把从网卡接收的的数据发送给哪一个应用程序进行处理。端口的本质是一个16位的无符号整数,因此它的取值范围为0-65535,1024之前的端口号称为保留端口,因为很多系统常见服务默认需要占用这些端口,因此我们自定义的网络服务要尽量避免使用这些端口号(自己实现的诸如HTTP、FTP等替代系统服务的应用除外)网络通讯网络通讯39网络通讯网络通讯使用Socket与ServerSocket 实现客户端与服务器端的通信习题2:使用URL读取 的网页内容习题3:使用UDP实现客户端与服务器端的通信

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

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

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