java10网络编程(简化版)课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《java10网络编程(简化版)课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java10 网络 编程 简化 课件
- 资源描述:
-
1、5:36第第1页页 JavaJava网络程序网络程序设计基础设计基础5:36第第2页页了解端口、套接字等网络程序常用专有名词了解端口、套接字等网络程序常用专有名词的意义的意义了解了解TCP/IPTCP/IP与与UDPUDP等网络协议的数据传递方等网络协议的数据传递方式式了解了解JavaJava语言中的常用数据流语言中的常用数据流掌握客服掌握客服/ /服务服务SocketSocket通信的流程通信的流程掌握多线程与其他程序的结合掌握多线程与其他程序的结合5:36第第3页页1.1.SocketSocket编程常用专有名字编程常用专有名字2.2.TCP/IPTCP/IP与与UDPUDP通信比较通信比
2、较3.3.客服客服/ /服务服务SocketSocket通信程序设计通信程序设计4.4.编写多线程的客户编写多线程的客户/ /服务程序服务程序5:36第第4页页 信息在一个进程的信息在一个进程的Socket和另一个进程的和另一个进程的Socket间,以报文传输的形式进行交换。间,以报文传输的形式进行交换。 发送端发送端Socket,报文以队列的形式等待,直报文以队列的形式等待,直到网络协议传输它们。当报文到达后,又在接收到网络协议传输它们。当报文到达后,又在接收端的端的Socket排队,等待接收进程以一定的系统排队,等待接收进程以一定的系统调用来接收它们。调用来接收它们。 在客户服务模式下,服
3、务器是监听请求的在客户服务模式下,服务器是监听请求的进程,客户是发送请求的进程。一旦服务器进程进程,客户是发送请求的进程。一旦服务器进程接收到了请求,它就试图去处理该请求,并且将接收到了请求,它就试图去处理该请求,并且将输出发送给客户。输出发送给客户。5:36第第5页页 Socket(套接字套接字)就是就是进程之间通信的抽进程之间通信的抽象连接点象连接点。 要理解这个概念,以现代生活举例,电要理解这个概念,以现代生活举例,电话是人们联系的常用方法,双方只要使用话是人们联系的常用方法,双方只要使用两部电话机就可以交谈。那么在计算机通两部电话机就可以交谈。那么在计算机通信中,两个程序就是使用信中,
4、两个程序就是使用Socket进行通信进行通信的,一个的,一个Socket就好比一部电话机,两个就好比一部电话机,两个程序通过一个双向链路进行通信,这个双程序通过一个双向链路进行通信,这个双向链路的每一端就成为一个向链路的每一端就成为一个Socket。5:36第第6页页 在在TCPIP协议的传输层提供了有关协议的传输层提供了有关Socket的各种调用,目的是在这个协议层的各种调用,目的是在这个协议层上实现网络进程之间的通信。上实现网络进程之间的通信。 进程之间要通信,首先要建立各自的进程之间要通信,首先要建立各自的Socket,就像要打电话一定要先有电话机就像要打电话一定要先有电话机一样,一样,
5、当电话通过当电话通过中间服务器中间服务器接通时接通时,每,每部电话机都可以说和听。与此类似,每个部电话机都可以说和听。与此类似,每个Socket也都可以进行读操作和写操作,进也都可以进行读操作和写操作,进行读行读/写操作时分别要用到写操作时分别要用到Socket中的输入中的输入流和输出流。流和输出流。5:36第第7页页 有些时候,一个有些时候,一个IP地址并不足以完整地址并不足以完整标识一个服务器。这是由于在一台物理主标识一个服务器。这是由于在一台物理主机中通常运行着多个服务器机中通常运行着多个服务器(程序程序)。由。由IP表表达的每台机器也包含了达的每台机器也包含了“端口端口”(Port)。
6、)。 端口是一个逻辑概念。主机上每一个提端口是一个逻辑概念。主机上每一个提供服务的程序都运行在该主机的一个对外供服务的程序都运行在该主机的一个对外开放的端口上。端口与使用该端口的服务开放的端口上。端口与使用该端口的服务进程是对应的。进程是对应的。5:36第第8页页 当设置一个客户机或者服务器的时候,当设置一个客户机或者服务器的时候,必须选择一个无论客户机还是服务器都认必须选择一个无论客户机还是服务器都认可连接的端口。可连接的端口。 就像我们去拜会某人时,就像我们去拜会某人时,IP地址是他居地址是他居住的房子,而端口是他在的那个房间。住的房子,而端口是他在的那个房间。 程序员可以在程序员可以在创
7、建自己的服务器程序创建自己的服务器程序时时使用使用自定义的端口自定义的端口(除了系统默认的端口和除了系统默认的端口和已占用的端口已占用的端口)。系统服务保留了使用端口。系统服务保留了使用端口1到端口到端口1024的权力。的权力。5:36第第9页页 ServerSocket会在主机上创建一个物会在主机上创建一个物理性的理性的“服务器服务器”或者侦听用的套接字,或者侦听用的套接字,服务器用它服务器用它“侦听侦听”进入的连接,一旦客进入的连接,一旦客户户(程序)申请建立一个套接字连接,程序)申请建立一个套接字连接,ServerSocket就就(利用利用accept()方法方法),会,会返回一个对应的
8、服务端套接字,以便进行返回一个对应的服务端套接字,以便进行直接通信。从此时起,我们就得到了真正直接通信。从此时起,我们就得到了真正的的“套接字一套接字套接字一套接字”连接,可以用同样连接,可以用同样的方式对待两端的连接。的方式对待两端的连接。5:36第第10页页 创建一个创建一个ServerSocket时,只需为其时,只需为其赋予一个端口编号。不必把一个赋予一个端口编号。不必把一个IP地址分地址分配给他,因为它已经在自己代表的那台机配给他,因为它已经在自己代表的那台机器上了。器上了。 但在创建一个但在创建一个Socket时,却必须同时时,却必须同时赋予赋予IP地址以及要连接的端口编号。地址以及
9、要连接的端口编号。(特指特指客户端客户端Socket,因为服务端通过因为服务端通过ServerSocket.accept()返回的返回的Socket对对象已经包含了这些相关信息象已经包含了这些相关信息)。5:36第第11页页 对于对于Socket程序,可以使用两种通信程序,可以使用两种通信协议:数据报通信协议:数据报通信(Datagram Communication)协议和流通信协议和流通信(Stream Communication)协议。它们都被协议。它们都被Java所所支持。支持。 数据报通信协议,如数据报通信协议,如UDP,为无连接协为无连接协议,可以在任何时候发送数据包。议,可以在任何
10、时候发送数据包。5:36第第12页页 流通信协议最广为人知的如流通信协议最广为人知的如TCP协议。协议。它与它与UDP不同,不同,TCP是一个面向连接的协是一个面向连接的协议。议。 为了使用为了使用TCP协议进行通信,必须先协议进行通信,必须先在两个在两个Socket之间建立连接。其中一个之间建立连接。其中一个Socket监听连接请求监听连接请求(服务器服务器),另一个发,另一个发出连接请求。一旦两个出连接请求。一旦两个Socket之间建立了之间建立了连接,它们就能被用来双向连接,它们就能被用来双向(或单向或单向)传递传递数据。数据。5:36第第13页页 使用使用UDP,每一次发送数据报时,都
11、每一次发送数据报时,都要随之一起发送本地的描述符和接收方要随之一起发送本地的描述符和接收方Socket地址。而使用地址。而使用TCP则不需如此,但则不需如此,但由于由于TCP是一个面向连接的协议,所以在是一个面向连接的协议,所以在通信之前,必须在通信之前,必须在Socket之间建立连接。之间建立连接。由上可知,使用由上可知,使用TCP需要建立连接的时间,需要建立连接的时间,而使用而使用UDP则需要更多的信息。则需要更多的信息。 TCP提供了双向的、有序的、无重复并提供了双向的、有序的、无重复并且无记录边界的数据流服务。且无记录边界的数据流服务。UDP也支持也支持双向的数据流,但并不保证可靠、有
12、序、双向的数据流,但并不保证可靠、有序、无重复,并且它保留了记录边界(无重复,并且它保留了记录边界(64K)。)。5:36第第14页页Socket是传输层提供的网络进程通信接口是传输层提供的网络进程通信接口。 它封装了通信协议族系的不同或同一它封装了通信协议族系的不同或同一族系传输层不同协议的差别。族系传输层不同协议的差别。 通信的主动方是客户,它利用通信的主动方是客户,它利用Socket机制,向服务器机制,向服务器(接收方)发送请求,服务接收方)发送请求,服务器接收客户请求,返回服务结果。器接收客户请求,返回服务结果。 用户可以为用户可以为Socket机制选取不同参数,机制选取不同参数,使使
13、Socket机制支持不同族系的通信协议机制支持不同族系的通信协议(TCPIP或其他或其他)、同族通信协议中不同、同族通信协议中不同质量要求的协议质量要求的协议(TCP或或UDP)。)。5:36第第15页页1、我们通过下图来了解一下客服、我们通过下图来了解一下客服/服务服务Socket通信程序设计的整个流程:通信程序设计的整个流程:1 1、建立服务器套接字对象、建立服务器套接字对象监视端口监视端口svrsocsvrsoc=new ServerSocket(8000) =new ServerSocket(8000) 3 3、客户建立、客户建立SocketSocket对象对象 soc=new soc
14、=new SocketSocket(“(“svrHost,8000)svrHost,8000)服务器服务器 客户机客户机 输入流输入流5 5、关闭、关闭 输出流输出流 Socket Socket 输入流输入流5 5、关闭、关闭 输出流输出流 Socket Socket2 2、接收连接、接收连接返回新返回新SocketSocket对象对象Socket soc=Socket soc=svrsoc.acceptsvrsoc.accept() () 监听监听4 4、构造数据输入流对象、构造数据输入流对象(接收)(接收) 数据输出流对象数据输出流对象 (发送)(发送)4 4、构造数据输出流对象、构造数据
15、输出流对象(发送)(发送) 数据输入流对象数据输入流对象(接收)(接收)socsocsocsoc5:36第第16页页 在在Java中,所有输入输出的核心就是数据流。中,所有输入输出的核心就是数据流。可以将数据流看作是一个管道,你可以可以将数据流看作是一个管道,你可以将数据输入将数据输入管道管道(即写入流即写入流),或,或从管道中取出信息从管道中取出信息(即从流中读即从流中读出出)。 使用使用Socket,所有读写的信息都被打包成不同所有读写的信息都被打包成不同形式的流。通过构建形式的流。通过构建OutputStream(提供了提供了Write()方法)写信息,通过构建方法)写信息,通过构建In
16、putStream(提供了提供了Read()方法)读信息,当一个方法)读信息,当一个Socket连接成功建立连接成功建立后,每一个终止点处都创建了一个后,每一个终止点处都创建了一个InputStream和和OuputStream。 lnputStream使用使用getlnputStream()来创建,来创建,OutputStream使用使用getOutputStream()来创建。这来创建。这些流既允许你读写单字节,也允许你读写多字节。些流既允许你读写单字节,也允许你读写多字节。5:36第第17页页1)编程步骤如下:)编程步骤如下:(1)创建一个创建一个ServerSocket对象,用于端口监
17、听对象,用于端口监听(只用于服务器程序只用于服务器程序)。)。public final static int TestPort=5000;ServerSocket checkServer=null;try checkServer=new ServerSocket(TestPort);catch(IOException ioe)System.err.println(ioe); 5:36第第18页页对于客户机:对于客户机:Socket c1=null;c1=new Socket(dbms-pc,RemotePort);(注意:为节省篇幅,程序省略异常处理,注意:为节省篇幅,程序省略异常处理,下同。
18、下同。)对于服务器:对于服务器:Socket clientSocket=null;clientSocket=checkServer.accept();(2)打开一个打开一个Socket对象。对象。5:36第第19页页BufferedReader is=null;BufferedWriter os=null;tryis =new BufferedReader(new InputStreamReader(clientSocket.getInputStream();os=new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputS
19、tream();catch(IOException e)System.err.println(e);调用调用is、os的相关方法(的相关方法(read(),write())可可以使用以使用Socket进行数据的发送和接收。进行数据的发送和接收。(3)创建一个数据输入流和一个数据输出流。创建一个数据输入流和一个数据输出流。客户机使用其客户机使用其Socket对象对象c1?为什么使用为什么使用BufferedReader和和BufferedWriter的做读、的做读、写流的对象,而不使用常写流的对象,而不使用常规的规的DataInputStream 与与DataOutputStream做读、做读、
20、写流的对象写流的对象?5:36第第20页页(4)关闭)关闭Socket。在退出前要关闭输入输出流及在退出前要关闭输入输出流及Socket,以此断开以此断开连接并且释放所有占用的资源。连接并且释放所有占用的资源。 需要注意的是,要先将对应的输入输出流关需要注意的是,要先将对应的输入输出流关闭,然后再关闭闭,然后再关闭Socket本身。本身。tryos.close();is.close();clientSocket.close();/客服机使用其客服机使用其Socket对象对象c1 catch(IOException e)System.err.println(e);5:36第第21页页2)实例程序
21、:)实例程序:Greetings服务器实例:服务器实例: 在这个客户服务器应用程序中,服务在这个客户服务器应用程序中,服务器监听着一个预定的端口号(器监听着一个预定的端口号(5000),等待),等待客户的连接。客户的连接。 当客户程序运行后,它请求用户输入一当客户程序运行后,它请求用户输入一个要发往服务器的关键句。个要发往服务器的关键句。 如果用户输入了正确的关键句如果用户输入了正确的关键句“Greetings”,那么服务器将把信息那么服务器将把信息“visit successfully!”发送回客户;否则服务器发发送回客户;否则服务器发送信息送信息“Sorry,you fogot our p
展开阅读全文