Java语言程序设计基础教程课件(第10章).ppt_第1页
Java语言程序设计基础教程课件(第10章).ppt_第2页
Java语言程序设计基础教程课件(第10章).ppt_第3页
Java语言程序设计基础教程课件(第10章).ppt_第4页
Java语言程序设计基础教程课件(第10章).ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

1、Java程序设计,第10章 java网络编程,第10章Java网络编程,10.1 网络编程基础知识 10.2 InetAdress类 10.3 基于套接字的低层次Java网络编程 10.4 UDP数据报及广播通讯 10.5 URL及应用示例,10.1网络编程基础知识,网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。 网络编程中有两个主要的问题, 如何准确的定位网络上一台或多台主机 如何可靠高效的进行数据传输。,TCP/IP协议、TCP、UDP,TCP是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到一个顺序无

2、差错的数据流。 发送方和接收方通信前必须先建立虚拟连接。,客户机/服务器结构,UDP是User Datagram Protocol的简称,是一种无连接的协议,以一个独立的包括完整的源地址和目的地址的数据报,为发送单元 数据报在网络上以任何可能的路径传往目的地 接收端不确认是否接收到数据报 因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。,两种协议简单比较,TCP需建立连接,UDP不需要建立连接 TCP可靠,UDP不可靠 TCP有主客之分,UDP关系平等 TCP无传输数据的大小限制,UDP数据报限制在64KB,10.1.2 Socket套接字,实现网络变成的一种接口或机制

3、Socket中封装了网络连接中的IP和端口号 可以把 Socket 看成是一个港口码头,发送数据,接收数据,Java 中的网络编程类,位于 包中 基于 TCP 通信的 Socket 对应的是 ServerSocket 类和Socket 类。 ServerSocket 是用于服务器端 Socket 类用于 TCP 通信的服务器和客户端 基于 UDP 通信的 Socket 对应的是 DatagramSocket 类。,10.3 InetAdress类,.InetAddress类封装了Internet主机的域名和IP地址如: 常用方法: static InetAddress getByname(St

4、ring s) static InetAddress getLocalHost() public String getHostName() public String getHostAddress() boolean isReachable(int timeout),10.4 基于TCP的网络编程,TCP 客户端与 TCP 服务器端程序的交互过程 由 TCP 服务器程序创建一个 ServerSocket 类,然后调用 accept() 方法等待客户端的连接。 客户端程序创建一个 Socket 并请求与服务器建立连接 服务器接收客户的连接请求,并创建一个与请求相关的新的 Socket 与客户机专

5、线连接。 建立连接的两个 Socket 在一个单独的线程(由服务器创建)上对话。 服务器程序又开始等待新的连接请求,当新的连接请求到达时,它又会重复 前面2-5的过程。,10.4.3创建Socket,.Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。构造方法如下: ServerSocket(int port); ServerSocket(int port, int backlog); ServerSocket(int port, int backlog, InetAddress bindAddr) Socket accept(),Socket(InetAddres

6、s address, int port); Socket(String host, int prot); Socket(String host, int port, InetAddress localAddr, int localPort) Socket(InetAddress address, int port, InetAddress localAddr, int localPort) InputStream getInputStream() OutputStream getOutputStream() close(),注意 在选择端口时,必须小心。每一个端口提供一种特定的服务,只有给出正

7、确的端口,才能获得相应的服务。01023的端口号为系统所保留,例如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口号为23, 所以我们在选择端口号时,最好选择一个大于1023的数以防止发生冲突。,10.4.4客户端的Socket,import java.io.IOException; import .Socket; public class ep10_6 public static void main(String args) try Socket socket = new Socket(, 4700); / 是默认的本机地址 c

8、atch (IOException e) System.out.println( e.getMessage(); ,10.4.5服务器端的ServerSocket,import java.io.IOException; import .ServerSocket; import .Socket; public class ep10_7 public static void main(String args) ServerSocket server = null; Socket socket = null; try server = new ServerSocket(4700); socket =

9、 server.accept(); /accept()会阻塞线程 System.out.println(“已建立连接”); socket.close(); catch (IOException e) System.out.println(e.getMessage); ,如何实现数据通信?,如何实现多客户端连接?,ServerSocket server = null; Socket socket = null; OutputStream os=null; InputStream is=null; byte b=new byte1024; try server = new ServerSocket

10、(4700); socket = server.accept(); /accept()会阻塞线程 System.out.println(“已建立连接”); os=socket.getOutputStream(); is=socket.getInputStream(); os.write(“how are you?”.getBytes(); is.read(b); os.close(); is.close();socket.close(); catch (IOException e) System.out.println(e.getMessage); ,InputStream is=null;

11、byte b=new byte1024; OutputStream os=null; OutputStream=null; try Socket socket = new Socket(, 4700); / 是默认的本机地址 is=socket.getInputStream();is.read(b); System.out.println(new String(b,0,b.length); os=socket.getOutputStream(); os.write(“fine,thanks”); is.close(); os.close(); socket.

12、close(); catch (IOException e) System.out.println(e.getMessage(); ,ServerSocket server = null; Socket socket = null; OutputStream os=null; InputStream is=null; byte b=new byte1024; try server = new ServerSocket(4700); socket = server.accept(); /accept()会阻塞线程 System.out.println(“已建立连接”); os=socket.ge

13、tOutputStream(); is=socket.getInputStream(); os.write(“how are you?”.getBytes(); is.read(b); os.close(); is.close();socket.close(); catch (IOException e) System.out.println(e.getMessage); ,为每个客户端启动一个新线程,10.4.9支持多客户的client/server程序设计,为了实现在服务器方给多个客户提供服务的功能,需要对上面的程序进行改造,利用多线程实现多客户机制。服务器总是在指定的端口上监听是否有客户

14、请求,一旦监听到客户请求,服务器就会启动一个专门的服务线程来响应该客户的请求,而服务器本身在启动完线程之后马上又进入监听状态,等待下一个客户的到来,作业,分别使用TCP方式,实现将客户端输入的”boy”在服务器端转换为”男孩”后返回给客户端,10.5 UDP数据报,TCP协议,是一种面向连接、可靠的字节流服务。UDP协议,是一种非面向连接、不可靠的报文服务。 当强调传输性能而不是传输的完整性时,如:音频、多媒体应用和视频会议时,UDP是最好的选择。QQ采用也是UDP协议。,10.5.2 DatagramSocket、DatagramPacket,.DatagramSocket的构造方法: Da

15、tagramSocket(); 用于建立单向通信发送端的套接字 DatagramSocket(int prot); 用于建立单向通信接收端或双向通信收发端的套接字 DatagramSocket(int port, InetAddress laddr) 用于指定本地的端口和网络地址(多网卡情况)的套接字 主要方法:send(数据报) receive(数据报),10.5.1 DatagramPacket,DatagramPacket构造方法: DatagramPacket(byte b,int length) 用于构造接收端的数据报 DatagramPacket(byte b,int length

16、, InetAddress address,int port) 用于构造发送端的数据报 主要方法:getData() getAddress() getPort() getLength(),public class UDPSend public static void main(String args) throws SocketException try DatagramSocket ds=new DatagramSocket(); String str=hello; DatagramPacket dp=new DatagramPacket (str.getBytes(),str.getByt

17、es().length, InetAddress.getByName(),3000); ds.send(dp); ds.close(); catch (Exception e) e.printStackTrace(); ,public class UDPRecv public static void main(String args) while(true) try DatagramSocket ds=new DatagramSocket(3000); byte b=new byte1024; DatagramPacket dp=new DatagramPacket(b,b.

18、length); ds.receive(dp); String str=new String(dp.getData(),0,dp.getLength() +from +dp.getAddress().getHostName() +:+dp.getPort(); System.out.println(str); ds.close(); catch (Exception e) e.printStackTrace(); ,10.5.3基于UDP的简单的Client/Server程序设计,有了上面的知识,我们就可以来构件一个基于UDP的C/S 网络传输模型 1. 客户方程序 QuoteClient.j

19、ava 2. 服务器方程序:QuoteServer.java 3. 程序QuoteServerThread.java,P232 例10-12,10.5.4基于UDP的广播通信,.MulticastSocket,允许数据报以广播方式发送到某个广播组中的所有客户,也用于充当客户端,监听服务器广播来的数据。 步骤: 建立广播套接字Multicastsocket socket 调用Socket.joinGroup(广播地址),加入某个广播组 构造用于发送或接收的广播组数据报 调用socket.send(数据报)或socket.receive(数据报),try group=InetAddress.get

20、ByName(); socket=new MulticastSocket(5858); socket.setTimeToLive(1); socket.joinGroup(group); byte buffer=“hello”.getBytes(); InetAddress address= InetAddress.getByName(); DatagramPacket data_pack=new DatagramPacket (buffer,buffer.length,address,666); DatagramSocket mail_data=new

21、 DatagramSocket(); mail_data.send(data_pack); catch(Exception e)System.out.println(e.getMessage(),SideA.java广播组群聊,setTImeToLive(int n)用于设置广播范围: 0:同一主机上的进程 1:同一子网上的进程 32:同一站点上的进程 64:同一区域的进程 128:同一大陆 255:无限制,10.2 URL及应用示例,Java程序可以获取网络上结点的图象、声音、HTML文档及文本等资源,并可以对获得的资源进行处理。例如Java程序可以每隔一定时间读取某结点提供的最新数据,并以

22、图表的形式显示出来。 URL(Uniform Resource Locator)是统一资源定位器 .URL类型的对象,可代表网络上的资源。,10.2.2 URL的组成,URL的一般格式为(带方括号的为可选项): protocol:/ hostname:port / path / ;parameters?query#fragment 包括协议名、主机名、端口号、文件名或文件内部的一个引用。例如: :80/WebApplication1/WebForm1.aspx?name=tom 通过一个表示URL地址的字符串,构造一个URL对象。 URL urlBase=new URL(http:/www.

23、public URL(URL context, String file); public URL(String protocol, String host, String file);,注意:类URL的构造方法都声明抛弃非运行时例外(MalformedURLException),,try URL myURL= new URL() catch (MalformedURLException e) /exception handler code here ,10.2.4解析一个URL,一个URL对象生成后,其属性不能改变,我们可以通过类URL所提供的方法来获取这些属性: public String

24、getProtocol() public String getHost() public int getPort() public String getFile(),public String getRef() 获取该URL在文件中的相对位置。 public String getQuery() 获取该URL的查询信息。 public String getPath() 获取该URL的路径 public String getAuthority() 获取该URL的权限信息 public String getUserInfo() 获得使用者的信息,【例10-1】生成一个URL对象,并获取它的各个属性。

25、,import .*; public class ParseURL public static void main(String args) throws Exception URL Aurl = new URL(“ftp:/a:80/docs/books/); URL tuto = new URL(Aurl, ro.html#DOWNLOADING); System.out.println(protocol= + tuto.getProtocol(); System.out.println(host = + tuto.getHost(); System.out.println(filename= + tuto.getFile(); System.out.p

温馨提示

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

评论

0/150

提交评论