收藏 分享(赏)

Java(网络编程)50742.ppt

上传人:dreamzhangning 文档编号:3324208 上传时间:2018-10-13 格式:PPT 页数:33 大小:128KB
下载 相关 举报
Java(网络编程)50742.ppt_第1页
第1页 / 共33页
Java(网络编程)50742.ppt_第2页
第2页 / 共33页
Java(网络编程)50742.ppt_第3页
第3页 / 共33页
Java(网络编程)50742.ppt_第4页
第4页 / 共33页
Java(网络编程)50742.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

1、第十一章 网络编程,11.1 网络编程的相关概念 11.2 Java对网络编程的支持 11.3 URL及应用 11.4 InetAddress及应用 11.5 使用TCP协议的Socket编程 11.6 数据报通信(UDP),1、TCP/IP (Transmission Control Protocol/Internet Protocol),11.1 网络编程的相关概念,协议族,包括TCP、IP、 UDP(User Datagram Protocol) ICMP(Internet Control Message Protocol)等。 TCP/IP采用4层结构,如图。 每一层都使用它的下一层所

2、提供的网络服务来完成自己的需求。 各层说明见下页。,应用层: 是应用程序间沟通的层,该层向用户提供常用的应用程序。主要协议:ftp,http,smtp,pop3,telnet等。 传输层:提供了结点间的数据传送服务,主要协议:TCP、(UDP),TCP和UDP给数据包加入传输数据并把它传输到下一层中,该层负责传送数据,并且确定数据已被送达并接收。 网络层/IP层: 负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),主要协议:IP,ICMP,ARP等。 网络接口层:定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。主要包括各

3、种逻辑链路控制及介质访问协议,如PPP, HDLC等。,11.1 网络编程的相关概念,2、Socket套接字:是指两个程序之间进行双向数据传输的网络通讯端点。通常用Socket实现客户方和服务方的连接。客户程序向Socket写请求,服务器将处理此请求,然后通过Socket将结果返回给用户。IP地址+网络端口号(port), Port: 16位,1023,11.1 网络编程的相关概念,包中的主要的类和可能产生的例外包括:面向应用层的类:URL、URLConnection面向传输层/IP层的类: TCP协议相关类:Socket、ServerSocket UDP协议相关类:DatagramPacke

4、t、DatagramSocket、MulticastSocket表示IP 地址的类: InetAddress 可能产生的异常: BindException、ConnectException、 MalformedURLException、NoRouteToHostException、ProtocolException、SocketException、 UnknownHostException、UnknownServiceException,11.2 Java对网络编程的支持,11.3 URL及应用,1、 URL(Uniform Resource Locator)表示Internet上某一资源的地

5、址。资源包括HTML文件、图象文件、声音文件、动画文件等。浏览器通过解析给定的URL可以在网络上查找相应的文件或网络资源。URL的语法格式如下::/dir/filename说明:protocol:定义传输协议,如http、ftp、file等。hostname:主机域名或IP地址;port:服务端口号;dir和filename:分别为服务器上的目录和文件名。 如:http:/ 在包中,提供URL类进行网络编程。1) 构造方法:public URL(String spec) public URL(URL context, String spec) public URL(String protoco

6、l, String host, String file) public URL(String protocol, String host, int port, String file) 具体的构造实例:URL url1 = new URL(“http:/ URL base = new URL(“http:/”); URL url2 = new URL(base, “mywork1.html”); URL url4 = new URL(“http”, “”,“/lyw/test.html”); URL url5 = new URL(“http”, “”, 8080, “/java/network

7、.html”);,11.3 URL及应用,注意: 当创建URL时发生错误,系统产生例外MalformedURLException,需在程序中捕获处理。URL url1,url2,url3; tryurl1 = new URL(“file:/D:/image/example.gif”);url2 = new URL(“http:/ = new URL(url2, “test.gif”); catch(MalformedURLException e) DisplayErrorMessage(); ,11.3 URL及应用,2) URL的常用方法: public String getProtocol

8、():获取该URL的协议名 public String getHost() :获取该URL的主机名 public String getPort() :获取该URL的端口号 public String getPath() :获取该URL的文件路径 public String getFile() :获取该URL的文件名 public String getRef() :获取该URL的引用部分(锚点) Public final InputStream openStream() ; 获取输入流(IO异常) 举例: Li11_01.java,11.3 URL及应用,锚点是网页中的一个位置 该超链接指向锚点

9、位置 它可以是本页的,也可以是其他网页的, 表示跳到其他网页的锚点,11.3 URL及应用,3) 获取网络上其他结点的图像: Li11_02.java 获取本地图像并显示。 import java.applet.*; import java.awt.*; public class Li11_02 extends AppletImage image;public void init() image=getImage(getDocumentBase(),“imagewu.gif“); public void paint(Graphics g) g.drawImage(image, 0, 0,thi

10、s); ,跟踪图像下载情况的类对象,11.3 URL及应用,3) 获取网络上其他结点的图像: Java提供方法:getImage(new URL(url)String url = “结点URL“;Image image;try image = getImage(new URL(url);catch(Exception e)System.out.println(“不能打开这个URL地址 “); 例Li11_04.java:调用http:/xzsd.8866.org/java/automain.jpg结点的图像,11.3 URL及应用,3)* 获取网络上其他结点的声音文件:,获取本地声音:直接使用

11、Applet类中的play(URL url)方法。例:Li10_01.java 获取网络结点声音文件,两种方法:第一种:利用play(URL1,String1) 直接播放第二种:通过getAudioClip(URL, String)先从网络上获取声音文件,并生成AudioClip 类型的对象,然后对该对象进行操作(play(),loop(),stop())。 例:Li11_06.java,1、 InetAddress类该类对象含有一个Internet主机地址的域名和IP地址。如: InetAddress类无构造函数,通常用它的静态方法来获取对象: public static InetAddre

12、ss getByName(String host) host:主机地址的域名或IP地址。 public static InetAddress getLocalHost() 注意:该方法通常会产生UnknownHostException例外。InetAddress类的主要方法: public String getHostAddress():获得本对象的IP地址 public String getHostName(): 获得本对象的主机名。 2、 InetAddress类的应用: DomainName.java / 根据域名自动到DNS上查找IP地址,获取本机IP.,11.4 InetAddres

13、s及应用,1、概述Java提供Socket和ServerSocket类作为标准的TCP套接字编程技术,通过它们实现主机与主机之间(应用程序间)的对话。位于:包中。使用Socket进行C/S程序设计的一般连接过程:Server端Listen(监听)某个端口是否有连接请求, Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。连接建立后,Server端和Client端都可以通过套接字类提供的一些方法与对方通信。,11.5 使用TCP协议的Socket编程,2、Socket类的构造方法: public Socket(String

14、host, int port) public Socket(InetAddress address, int port) public Socket(String host, int port, InetAddress localAddr, int localPort)/在指定的机器上的指定端口上运行 上述方法都将抛出例外IOException,程序中需要捕获处理。,11.5 使用TCP协议的Socket编程,3、Socket的常见方法:/Socket的输入/输出流管理;抛出例外IOException。 public InputStream getInputStream() public vo

15、id shutdownInput() public OutputStream getOutputStream() public void shutdownOutput()/关闭Socketpublic void close() throws IOException/设置/获取Socket数据: public InetAddress getInetAddress() 返回此套接字链接的地址对象 public InetAddress getLocalAddress() 返回此套接字本地的地址对象 public int getPort() 返回此套接字链接地址的端口上述方法都将抛出例外SocketE

16、xception,程序中需要捕获处理。,11.5 使用TCP协议的Socket编程,4、ServerSocket类 构造方法: public ServerSocket(int port) public ServerSocket(int port, int backlog) /支持指定数目的连接 public ServerSocket(int port, int backlog, InetAddress bindAddr)/在指定的机器上运行 主要方法 public Socket accept():等待客户端的连接 public void close():关闭Socket设置/获取Socket数

17、据的方法 public InetAddress getInetAddress() public int getLocalPort(),,11.5 使用TCP协议的Socket编程,5、Socket通信程序基本结构都一样,包括以下四个基本步骤: 1、在客户方和服务器方创建Socket/ServerSocket实例。 2、打开连接到Socket的输入/输出流。 3、利用输入/输出流,按照一定的协议对Socket进行读/写操作。 4、关闭输入/输出流和Socket。通常,程序员的主要工作是针对所要完成的功能在第3步进行编程,第1、2、4步对所有的通信程序来说几乎都是一样的。,11.5 使用TCP协议

18、的Socket编程,11.5 使用TCP协议的Socket编程,6、程序实现1)建立Socket 在客户端: trySocket client = new Socket(host, 4444); catch(IOException e) 在服务器端: tryServerSocket server = new ServerSocket(4444); catch(IOException e) Socket socket = null; trysocket = server.accept(); /等待客户端连接 catch(IOException e),11.5 使用TCP协议的Socket编程,B

19、ufferedReader aa = new BufferedReader(new InputStreamReader( socket.getInputStream() ) ); PrintWriter os=new PrintWriter(socket.getOutputStream();,2) 在客户端和服务器端同时打开输入/输出流类Socket提供了方法getInputStream()和getOutputStream()来得到Socket对应的输入/输出流以进行数据读写(传输)操作,它们分别返回InputStream对象和OutputStream对象。为了便于读写数据,应在返回的输入/输

20、出流对象上建立过滤流,如DataInputStram/DataOutputStram、BufferedInputStream/ BufferedOutputStream、PrintStream;InputStreamReader/ OutputStreamWriter、BufferedReader/ BufferedWriter、PrintWriter等。,11.5 使用TCP协议的Socket编程,3)关闭输入/输出流和Socket在客户端和服务器端分别关闭输入/输出流和Socket:先关闭所有相关的输入/输出流,再关闭Socket。举例:一对一C/S通讯程序的实现。Li11_09S.jav

21、a Li11_09C.java,11.5 使用TCP协议的Socket编程,7、一对多C/S通讯程序的实现。解决方案一:在一台计算机上一次启动多个服务器程序,只要端口号不同。 myserver1 myclient1 myserver2myclient2,11.5 使用TCP协议的Socket编程,解决方案二:将服务器写成多线程的,不同的处理线程为不同的客户服务。主线程只负责循环等待,处理线程负责网络连接,接收客户输入的信息。 /主线程 while (true) accept a connection ;create a thread to deal with the client ; end

22、while,11.5 使用TCP协议的Socket编程,serverSocket = new ServerSocket(4444); while (listening) Socket socket;socket = serverSocket.accept(); /程序将在此等候客户端的连接clientNumber+; /记录客户数目new ServerThread (socket, clientNumber).start(); /创建一个新线程处理此客户请求 serverSocket.close();,class ServerThread extends Thread public Serve

23、rThread(Socket socket, int clientNumber)this.socket = socket;this.clientNumber = clientNumber;public void run() 举例:MultiThreadServer.java Client1.java,11.5 使用TCP协议的Socket编程,一、概述UDP通信是一种无连接的数据报通信。使用该协议,两个程序进行通信时不用建立连接;数据以独立的包为单位发送,包的容量限定在64KB以内;每个数据报需要有完整的收/发地址,可以随时进行收/发数据报,但不保证传送顺序和内容准确;数据报可能会被丢失、延误

24、等。UDP通信是不可靠的通信,但通信速度较快,常常被应用在某些要求实时交互,准确性要求不高,但传输速度要求较高的场合(如视频会议系统等)。Java中,基于UDP协议实现网络通信的类有三个:用于表示通信数据的数据报类:DatagramPacket用于进行端到端通信的类:DatagramSocket用于广播通信的类:MulticastSocket。,11.6 数据报通讯(UDP),二、基于UDP通信的基本模式 将数据打包,发往目的地 接受别人发来的数据包,察看数据包内容,11.6 数据报通讯(UDP),1、发送数据包 1)用DatagramPacket类将数据打包,即创建数据包对象。 Datagr

25、amPacket(byte data, int length, InetAddtress address,int port)Address: 目标主机地址 Port:目标主机端口 如:byte data=“近来好吗”.getByte();InetAddress address=inetAddress.getByname();DatagramPacket data_pack=new DatagramPacket(data,data.length,address,980); 注: data_pack常用方法:Public int getPort(); public InetAddress getA

26、ddress(); Public byte getData();,11.6 数据报通讯(UDP),2)用DatagramSocket类的构造方法DatagramSocket()创建一个对象,该对象负责发送数据包。例: DatagramSocket mail_out=new DatagramSocket(); Mail_out.send(data_pack); 2、接收数据DatagramSocket mail_in=new DatagramSocket(int port); 注意:mail_in的主要方法: Receive(DatagramPacket pack) /接收数据包给pack, 例

27、如: DatagramPacket pack=new DatagramPacket(data,length) Mail_in.receive(pack); 举例: Shanghai,Beijing ; 上机:P381 13 15,*6、数据报通信广播通信,DatagramSocket只允许数据报发往一个目的地址。类包中提供了类MulticastSocket,允许将数据报以广播的方式发送到某个端口的所有客户。类MulticastSocket是在客户端(接收端)使用,监听服务器端广播来的数据;而服务器端仍然使用DatagramSocket来发送数据,只是发送的数据报的目的地址有所变化。,类Mult

28、icastSocket:从DatagramSocket继承而来构造方法 public MulticastSocket() public MulticastSocket(int port) :在指定的端口通信 这两个方法都将抛出例外IOException,程序中需要捕获处理。主要方法 public void joinGroup(InetAddress mcastaddr):加入一个广播组 public void leaveGroup(InetAddress mcastaddr):离开一个广播组 public void setTimeToLive(int ttl):指定数据报离开时间 public

29、 void send(DatagramPacket p, byte ttl):在指定的时间内将数据报发送出去 这四个方法都将抛出例外IOException,程序中需要捕获处理。继承DatagramSocket的方法 public void receive(DatagramPacket p):接收数据 public void send(DatagramPacket p):发送数据 public void connect(InetAddress address, int port):与指定的机器通信 public void disconnect():关闭指定的连接 public void clos

30、e():关闭Socket,* 6、数据报通信广播通信,* 6、数据报通信广播通信,MulticastSocket socket = new MulticastSocket(4446); InetAddress group = InetAddress.getByName(“230.0.0.1“); socket.joinGroup(group); /receive datagram socket.leaveGroup(group); socket.close();,InetAddress group = InetAddress.getByName(“230.0.0.1“); DatagramPa

31、cket packet = new DatagramPacket(buf, buf.length, group, 4446); socket.send(packet);,客户端,服务器端,广播组的IP地址是一类特殊的IP地址,它们没有分配给网上的硬件资源使用,而是专门保留下来作为广播通信使用的(就像127.0.0.1是专门用来描述本机IP一样)。这一类地址的范围是从224.0.0.0到239.255.255.255,其中地址 224.0.0.0又被保留不能被一般应用程序所使用。当前,广播通信只能在应用程序中使用,不能在Applet中使用。,* 6、数据报通信广播通信,许多防火墙和路由器可以配置为不允许UDP数据报进入。因此,如果想在这种环境下提供UDP网络服务,就需要请求系统管理员重新配置防火墙和路由器,以允许UDP数据报进入。,* 6、数据报通信,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报