《Java 2面向对象程序设计基础》第8章Java的网络编程.ppt





《《Java 2面向对象程序设计基础》第8章Java的网络编程.ppt》由会员分享,可在线阅读,更多相关《《Java 2面向对象程序设计基础》第8章Java的网络编程.ppt(78页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、http:/ Java的网络编程(时间:3次课,6学时)http:/ Java的网络编程 n教教学学提提示示:Java语语言言已已成成为为网网络络应应用用软软件件开开发发的的主主要要工工具具。使使用用Java语语言言进进行行网网络络连连接接编编程程比比C+语语言言要要容容易易得得多多。Java提提供供了了许许多多内内置置的的网网络络功功能能,使使开开发发基基于于Internet和和Web的应用程序更容易。的应用程序更容易。n本本章章主主要要介介绍绍:网网络络基基础础知知识识、Socket套套接接字字、Java开开发发TCP/IP程序、多线程服务器、数据报、程序、多线程服务器、数据报、URL资源
2、资源http:/ Java的网络编程 n8.1 网络基础知识网络基础知识n8.2 Socket套接字套接字n8.3 Java开发开发TCP/IP程序程序n8.4 多线程服务器多线程服务器n8.5 数据报数据报n8.6 URL资源资源n8.7 网络聊天程序实例网络聊天程序实例n8.8 课后练习课后练习 http:/ 网络基础知识网络基础知识 n8.1.1 TCP/lP参考模型参考模型n8.1.2 建立网络连接建立网络连接 http:/ 网络基础知识网络基础知识 n网络编程涉及客户与服务器两个方面及它们之间的联系。客户端请求服务器执行某个操作,服务器执行这个操作并对客户端作出响应。在网页浏览器与h
3、ttp 服务器之间,按照请求应答响应模式工作。当用户在浏览器中选定一个网站时,这个请求就发送到相应的网络服务器上。服务器发送相应的HTML网页来响应客户端。http:/ TCP/lP参考模型参考模型 nTCP/IP是传输控制协议/网际协议的简称,它包含100多个不同功能的协议,是互联网上的通信规则。其中最主要的是TCP 和IP协议。TCP/IP是一个四层的体系结构,它包含应用层、传输层、网际层和网络接口层。http:/ TCP/lP参考模型参考模型 n按照网络通信的不同层次,Java提供的网络功能有4大类:URL、Sockets、Datagram和InetAddress。应用层负责将网络传输的
4、信息转换成我们能够识别的信息,包括很多面向应用的协议,如SMTP(简单邮件传输协议)、HTTP(超文本传输协议)等。在这一层,Java使用URL、URLConnection 类。通过URL 类,Java程序可以直接发出或读取网络上的数据。传输层提供端到端的通信,包括面向连接的TCP(传输控制协议)和无连接的UDP(用户数据包协议)。TCP协议提供了可靠的数据传输服务,具有流量控制、拥塞控制、按顺序递交等功能。UDP增加的服务是不可靠的,但其系统资源开销小,在流媒体系统中使用较多。http:/ 建立网络连接建立网络连接 nTCP/IP 中的端口号是一个16 位的数字,它的范围是065535。其中
5、的01023为系统所保留,专门用于那些通用的服务(例如TELNET、SMTP 和FTP 等),如HTTP 服务的端口号为80,TELNET服务的端口号为21,FTP 服务的端口号为23。因此,编写通信程序时,应选择一个大于1023 的数作为端口号,以免发生冲突。IP地址与端口号组合可以完全分辨Internet 上某台计算机运行的某一程序。n客户和服务器必须事先约定所使用的端口。如果系统两部分所使用的端口不一致,则不能进行通信。客户端与服务器端建立连接的过程如图8-2 所示。http:/ 建立网络连接建立网络连接 n图8-2 客户端与网络的连接过程http:/ 建立网络连接建立网络连接 n服务器
6、端软件在远程计算机上连续不断地运行,监听各端口上的通信请求。当服务器上接收到一个对某一端口的连接请求时,就唤醒正在运行的服务器软件,建立连接。该连接将一直保持下去,直到通信的某一方将它中断。http:/ Socket套接字套接字 nSocket(套接字)是网络上运行的两个程序之间双向通信链路的终端点,它是TCP和UDP的基础。一个Socket 被绑定到一个端口号上,这样传输层就能识别数据要发送哪个应用程序。n建立网络连接之后,使用与Socket 相关联的流和使用其他流非常相似。基于Socket的通信通过Socket 读取和写入数据,使应用程序对网上数据的读写操作,像对本地文件的读写一样简单。S
7、ocket 允许程序把网络连接当成一个流,可以向这个流写字节,也可以从这个流读取字节。http:/ Socket套接字套接字 nJava 提供了Stream Sockets(流套接字)和Datagram Sockets(数据报套接字)。用Stream Sockets 可以在两个进程之间建立一个连接,连接建立后,数据在相互连接的进程间流动。所以说Stream Sockets 提供面向连接的服务,它使用的是TCP 协议。n在Java编程语言中,TCP/IP Socket 连接是用包中的类实现的。图8-3 说明了Socket 连接机制。http:/ Socket套接字套接字 n图8-3 Socket
8、连接机制http:/ Socket套接字套接字nSocket工程的通信过程如下。工程的通信过程如下。n(1)建立连接:服务器端程序分配一个端口号,开始监听来自客户端的请求。当客户请求一个连接时,服务器使用accept()方法打开Socket 连接,将该Socket 连接到此端口上。n(2)数据通信:服务器和客户端使用Socket 的InputStream(输入流)和OutputStream(输出流)进行通信。n(3)关闭连接:通信结束,服务器和客户端程序断开连接,释放所占用的系统资源。http:/ Java开发开发TCP/IP程序程序 nJava所提供的网络功能可大致分为如下4大类。nInet
9、Address:在网络层,用于标识网络上的硬件资源。nURL 和URLConnection:可表示和建立确定网络上资源的位置,Java程序可以直接读入网络上的数据,或把自己的数据传送到网络的另一端。nSocket:是两个不同的程序之间在网络上传输数据的通道,这是网络程序中最基本的方法。一般在TCP/IP协议下的客户服务器软件采用Socket 作为交互方式。nDatagram:是功能最低级的一种。其他网络数据传送方式,都假想在程序执行时,建立一条安全稳定的通道。但是以Datagram 方式传送数据时,只把数据目的地记录在数据包中,然后就直接放在网络上进行传输,系统不保证数据一定能够安全送到,也不
10、能确定什么时候可以送到。http:/ 多线程服务器多线程服务器 n8.4.1 服务器端服务器端ServerSocketn8.4.2 客户端客户端Socketn8.4.3 多线程服务器实例多线程服务器实例 http:/ 多线程服务器多线程服务器 nJava软件包内在支持的网络协议为TCP/IP,也是当今最流行的广域网/局域网协议。Java有关网络的类及接口定义在包中。客户端软件通常使用包中的核心类Socket与服务器的某个端口建立连接,而服务器程序不同于客户机,它需要初始化一个端口进行监听,遇到连接呼叫,才与相应的客户机建立连接。http:/ 服务器端服务器端ServerSocket n在Ser
11、verSocket 类中包含了创建ServerSocket 对象的构造方法、在指定端口监听的方法、建立连接后发送和接收数据的方法。n构造方法如下:构造方法如下:npublic ServerSocket(int port)throws IOException BindExceptionpublic ServerSocket(int port,int queuelength)throws IOException,BindExceptionnpublic ServerSocket(int port,int queuelength,InetAddress bindaddress)throws IOEx
12、ception,BindExceptionhttp:/ 服务器端服务器端ServerSocketnServerSocket 类的常用方法有以下几个。类的常用方法有以下几个。npublic Socket accept()throws IOExceptionnpublic void close()throws IOExceptionnpublic InetAddress get InetAddress()npublic int getLocalPort()http:/ 客户端客户端Socket n客户端客户端Socket的构造函数如下。的构造函数如下。n(1)public Socket(Strin
13、g host,int port)throws unknownHostException,IOExceptionn这个方法建立一个到主机这个方法建立一个到主机host、端口号为、端口号为port 的套接字,连接到远程主机。示的套接字,连接到远程主机。示范代码如下。范代码如下。ntrynn Socket soc=new Socket(,80);n /发送数据发送数据nncatch(unknownHostException uex)nnncatch(IOException e)nnn(2)public Socket(InetAddress host,int port)throws IOExcepti
14、onn建立一个套接字,与前一个不同的是,它用建立一个套接字,与前一个不同的是,它用InetAddress 对象指定套接字。如对象指定套接字。如果出错则抛出果出错则抛出IOException 异常。异常。http:/ 客户端客户端Socket nSocket类的常用方法有以下几个。n(1)public InetAddress getInetAddress()n调用Socket 对象的getInetAddress()方法返回连接到远程主机的地址,如果连接失败,则返回以前连接的主机。n(2)public int getPort()n返回Socket连接的远程主机端口号。n(3)public int
15、getLocalPort()n一个Socket 连接两个终端,方法getLocalPort()返回本地连接终端的端口号。http:/ 客户端客户端Socket n(4)public InetAddress getLocalAddress()n此方法告诉用户套接字Socket 绑定到哪个网络接口。用户通常在多目录的主机或带有多目录的网络接口上使用这个方法。n(5)public InputStream getInputStream()throws IOExceptionn这个方法返回一个输入流,利用这个流就可以从套接字读取数据。通常连接这个流到一个BufferedInputStream 或者Buf
16、feredReader。http:/ 客户端客户端Socketn(6)public OutputStream getOutputStream()throws IOExceptionn返回一个原始的Outputstream,可以从应用程序写数据到套接字的另一端。通常将它连接到DataOutputStream 或者OutputStreamWriter 等更方便的类,还可以连接到缓冲类。n(7)public synchronized void close()throws IOExceptionn虽然套接字会在程序结束时被自动关闭,但是应该用close()方法断开连接,特别是要运行无限长时间的程序时。
17、http:/ 多线程服务器实例多线程服务器实例 n【例8.1】下面进行客户机/服务器模式下的Socket 编程,包括一个服务器和一个客户机的程序例子。服务器端程序负责监听客户机请求,为每个客户机请求建立Socket 连接,从而为客户机提供服务。本程序提供的服务为:读取来自客户机的命令,根据客户机的命令,决定服务器要发给客户机的信息,并发送给客户机。http:/ 多线程服务器实例多线程服务器实例 n(1)TCP/IP 服务器服务器ServerSocketn/=Program Discription=n/程序名称:程序名称:SimpleServer.javan/程序目的:程序目的:TCP/IP服务
18、器应用程序依靠服务器应用程序依靠Java技术语言提供的网络类。技术语言提供的网络类。ServerSocket类类n/完成建立一个服务器所需的大部分工作。在本机端口完成建立一个服务器所需的大部分工作。在本机端口5432提供时间服务提供时间服务n/=nimport java.io.*;nimport java.util.*;nimport .*;npublic class SimpleServer nnpublic static void main(String args)nhttp:/ 多线程服务器实例多线程服务器实例 nServerSocket s=null;nSocket s1;nOutpu
19、tStream s1out;nDataOutputStream dos;n/String line=only one line.;ntrynns=new ServerSocket(5432);n/Register your service on port 5432nncatch(IOException e)/Run the listen/accept loop forevernwhile(true)nntrynhttp:/ 多线程服务器实例多线程服务器实例 ns1=s.accept();/Wait here and listen for a connectionns1out=s1.getOut
20、putStream();n/Get a communication stream for soocketndos=new DataOutputStream(s1out);ndos.writeUTF(new Date().toString();n/Send string!(UTF provides machine-independent format)n/dos.writeUTF(line);ns1out.close();n/Close the connection,but not the server socketns1.close();nncatch(IOException e)nnnhtt
21、p:/ 多线程服务器实例多线程服务器实例 n(2)客户端客户端Socketn/=Program Discription=n/程序名称:程序名称:SimpleClient.javan/程序目的:客户端程序目的:客户端Socket完成了建立一个连接所需的大部分工作。客户连接完成了建立一个连接所需的大部分工作。客户连接到服务器上,显到服务器上,显n/示服务器发送的所有时间数据。通过示服务器发送的所有时间数据。通过Socket获得服务器提供的时间字符串,获得服务器提供的时间字符串,并显示并显示n/=nimport .*;nimport java.io.*;npublic class SimpleCli
22、ent nnpublic static void main(String args)throws IOException nnSocket s1;nInputStream s1In;nDataInputStream dis;nString st;http:/ 多线程服务器实例多线程服务器实例ns1=new Socket(127.0.0.1,5432);n/Open your connection to sunbert,at port 5432ns1In=s1.getInputStream();n/Get an inputStream from the socket and read the i
23、nputndis=new DataInputStream(s1In);nst=new String(dis.readUTF();nSystem.out.println(st);n/When done,just close the connection and exitns1In.close();ns1.close();nnn运行结果如图运行结果如图8-4所示。所示。http:/ 多线程服务器实例多线程服务器实例n图8-4 运行结果(例8.1)http:/ 数据报数据报 n8.5.1 DatagramPacketn8.5.2 DatagramSocketn8.5.3 数据报实例数据报实例n8.5
24、.4 组播套接字组播套接字 MulticastSocket http:/ 数据报数据报 nTCP/IP是一种面向连接的协议,而用UDP 是一种无连接的协议,它只是把数据的目的地记录在数据报中,然后直接放在网络上,不保证传送质量。n在包中有3个类支持基于UDP协议的网络通信:n表示数据报的DatagramSocket类;n用于端到端通信的DatagramPacket类;n用于广播通信的MulticastSocket类。http:/ DatagramPacket n1.将数据打包包中的DatagramPacket类用来创建数据报。数据报有两种,一种用来传递数据报,该数据报有要传递到的目的地址;另一
25、种数据报用来接收传递过来的数据报中的数据。分别用DatagramPacket 的两个构造函数来创建。n(1)DatagramPacket(byte recvBuf,int readLength)n用来建立一个字节数组以接收UDP包。byte 数组在传递给构造函数时是空的,而int 值用来设置要读取的字节数(不能比数组的大小还大)。http:/ DatagramPacket n(2)DatagramPacket(byte sendBuf,int sendLength,InetAddress iaddr,int iport)n用来建立将要传输的UDP包。sendLength不应该比sendBuf字
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 2面向对象程序设计基础 Java 2面向对象程序设计基础第8章Java的网络编程 Java 面向 对象 程序设计 基础 网络 编程

限制150内