Presentation is loading. Please wait.

Presentation is loading. Please wait.

西南科技大学网络教育系列课程 高级语程序设计(Java) 第十一章 Java 中的网络编程.

Similar presentations


Presentation on theme: "西南科技大学网络教育系列课程 高级语程序设计(Java) 第十一章 Java 中的网络编程."— Presentation transcript:

1 西南科技大学网络教育系列课程 高级语程序设计(Java) 第十一章 Java 中的网络编程

2 概述 Java提供了比较完善的网络功能,定义在java.net包中。 通过流模式来实现网络信息交换,一个接口就同时拥有输入流和输出流。
网络功能采用客户机/服务器体系结构。 将网络功能按层次及使用方法分为三类: URL ; Socket ; DatagramSocket Application(HTTP,ftp,telnet…) Transport(TCP,UDP…) Network(IP…) Link(device driver…) Java网络通信分层模型 URL Socket

3 URL的相关概念 URL类 IP地址唯一标识了网络上的计算机,URL则标识了这些计算机上的资源。
URL类是对统一资源定位(Uniform Resource Locator)的抽象。

4 使用URL创建对象的应用程序称作客户端程序。
一个URL对象存放着一个具体的资源的引用,表明客户要访问这个URL中的资源 利用URL对象可以获取URL中的资源。 一个URL对象通常包含最基本的三部分信息: 协议:必须是URL对象所在的Java虚拟机支持的协议。 地址:必须是能连接的有效IP地址或域名。 资源:可以是主机上的任何一个文件。 ftp:// file://

5 public URL(String spec) public URL(URL context,String spec)
context:事先创建某个URL对象 spec通常是context上的某个文件或子目录 public URL(String protocol,String host,int port,String file) protocol:协议比如http、ftp、file file:该主机上的某个文件(可以包括目录) 构造方法会抛出MalformedURLException异常

6 例:构造方法使用字符串初始化一个URL对象
try { url = new URL(" } catch(MalformedURLException e) { System.out.println ("Bad URL:"+url);

7 读取URL中的资源 URL对象调用 该输入流指向URL对象所包含的资源。 通过该输入流可以将服务器上的资源信息读入到客户端。
public final InputStream openStream() throws IOException 方法可以返回一个输入流。 该输入流指向URL对象所包含的资源。 通过该输入流可以将服务器上的资源信息读入到客户端。 JTextField text = new JTextField(20); URL url = new URL(text.getText().trim()); InputStream in = url.openStream();

8 显示URL资源中的html文件 把html文件读入到JEditorPane,该html文件就会被解释执行,结果显示在JEditorPane中。 JEditorPane类的构造方法 public JEditorPane():构造JEditorPane对象。 public JEditorPane(URL initialPage) throws IOException:构造JEditorPane对象,使用参数initialPage指定对象最初显示的URL中的资源。 public JEditorPane(String url) throws IOException:构造JEditorPane对象,使用参数url指定该对象最初显示的URL中的资源。

9 public void setPage(URL page) throws IOException:显示新的URL中的资源。
用JEditorPane对象显示网页 JTextField text=new JTextField(20); JEditorPane editPane = new JEditorPane(); URL url = new URL(text.getText().trim()); editPane.setPage(url);

10 处理超链接 单击网页中超链接可以使得JEditorPane对象触发HyperlinkEvent事件, 通过处理HyperlinkEvent事件,来显示新的URL资源。 注册HyperlinkEvent的监听器 addHyperlinkListener(HyperlinkListener listener) 监听器需实现HyperlinkListener接口中的方法 void hyperlinkUpdate(HyperlinkEvent e)

11 InetAdress类 Java.net包中的InetAdress类对象含有一个Internet主机地址的域名和IP地址
域名:如, IP地址:如, 获取Internet上主机的地址 public static InetAddress getByname(String s) throws UnknownHostException 将一个域名或IP地址传递给该方法的参数s,获得一个InetAdress对象,该对象含有主机地址的域名和IP地址。

12 例:获取域名是www. swust. edu. cn的主机域名及IP地址,同时获取了IP地址是202. 115. 160
例:获取域名是 public class DomainName { public static void main(String[] args) { try{ InetAddress address_1 = InetAddress.getByName (" "); System.out.println(address_1.toString()); InetAddress address_2 = InetAddress.getByName (“ "); System.out.println(address_2.toString()); } catch(UnknownHostException e){ System.out.println(“无法找到 }

13 InetAddress类中含有两个实例方法:
public String getHostName()获取InetAddress对象所含的域名。 public String getHostAddress() 获取InetAddress对象所含的IP地址。 获取本地机的地址 使用InetAddress类的静态方法: getLocalHost() 获得一个InetAddress对象,该对象含有本地机的域名和IP地址。

14 套接字Socket Socket概述 套接字(Socket)是实现客户机和服务器间通信的一种机制。
套接字连接:客户端的套接字对象和服务器端的套接字对象通过输入、输出流连接在一起。 Java中的套接字来源于伯克利(Berkeley)的BSD引入的套节字范型 套接字(Socket)可用于网络通信传输的三个协议:IP、TCP、UDP Server P o r t port client connection

15 套接字端口号被规定为一个16位的整数0~65535。 保留套接字:TCP/IP为特定协议保留了低端的1024个端口,比如,FTP:21;Telnet:23; :25;HTTP:80。 TCP/IP套接字用于在主机和Internet之间建立可靠的、双向的、持续的、点对点的流式连接,分为两类: 服务器端套接字:ServerSocket类 客户端套接字:Socket类

16 客户端使用Socket类建立一个到服务器的套接字对象。 Socket类的构造方法
Socket(String host,int port):创建一个套接字对象,请求和host指定的服务器通过port端口建立连接。 Socket(String host,int port,InetAddress localAddr,int localport):以本地机localAddr的localport端口创建一个套接字对象,并请求和host指定的服务器通过port端口建立连接。

17 构造方法可能发生IOException异常。
try{ Socket mysocket = new Socket (“ ”, 1088); } catch(IOException e){ … } 客户端建立有参数的Socket对象的过程就是向服务器发出套接字连接请求。 如果服务器端相应的端口上有ServerSocket对象正在使用accept方法等待客户,那么双方的套接字对象就连接在一起。

18 为空套接字建立连接 public void connect(SocketAddress endpoint) throws IOException 为了使用connect方法, 使用InetSocketAddress创建一个连接对象。 InetSocketAddress的构造方法 public InetSocketAddress(InetAddress addr, int port)

19 服务器端套接字(ServerSocket) 客户端使用ServerSocket类建立一个等待请求的服务器套接字对象。
ServerSocket(int port):创建一个端口号为port的服务器套接字对象。 ServerSocket(int port,int backlog):创建一个端口号为port的服务器套接字对象,并设定最大连接数为backlog。 构造方法可能发生IOException异常。 try{ ServerSocket myserver = new ServerSocket (“ ”, 1088); } catch(IOException e){ … }

20 public Socket accept() throws IOException
接受客户的套接字连接请求 public Socket accept() throws IOException try{ Socket socketAtServer= waitSocketConnection.accept(); }catch(IOException e){ …… } 套接字的流连接 客户端和服务器端的套接字对象进行连接以后,还必须进行输入、输出流的连接才能进行通信。

21 套接字连接示意图 输入流 输出流 客户端套接字 (Socket) 服务器端套接字 (Socket) 连接 getInputStream()
getOutputStream() getInputStream() 套接字连接示意图

22 getInputStream和getOutputStream的声明
public InputStream getInputStream() throws IOException public OutputStream getOutputStream() hrows IOException 方法使用时注意捕捉异常。

23 利用Socket方式进行通信的一般步骤 创建服务器ServerSocket,设置建立连接的Port。 创建客户机Socket ,设置绑定的主机名称或IP地址,指定连接端口号。 客户机Socket发起连接请求 建立连接(accept)。 取得InputStream和OutputStream 利用InputStream和OutputStream进行数据通信。

24 使用多线程处理套接字连接 把数据读写放在一个单独线程的run()方法中去进行。 服务器端接受一个客户套接字的请求后,就应该启动一个专门为该客户服务的线程。 尽量不要在主线程中进行套接字通信。

25 UDP数据报 基于UDP的信息传递更快,但不提供可靠性保证。 基于UDP通信的基本模式 将数据打包,称为数据包,然后将数据包发往目的地。 接受别人发来的数据包,然后查看数据包中的内容。

26 使用DatagramPacket类的对象将数据打包
发送数据 使用DatagramPacket类的对象将数据打包 DatagramPacket(byte data[ ],int length, InetAddtress address,int port) DatagramPack(byte data[ ],int offset,int length,InetAddtress address,int port) byte[ ] data=”这是一个测试”.getByte(); InetAddress address = InetAddress.getByName(“ DatagramPacket data_pack=new DatagramPacket(data,data.length,address,980)

27 使用DatagramSocket类创建发送数据的对象 DatagramSocket() 使用send方法发送数据
byte[ ] data=”这是一个测试”.getByte(); InetAddress address = InetAddress.getByName(“ DatagramPacket data_pack = new DatagramPacket(data,data.length,address,980) DatagramSocket sender = new DatagramSocket(); sender.send(data_pack);

28 使用DatagramPacket类创建接收数据的包 DatagramPack(byte[ ] data,int length)
byte data[ ]=new byte[100]; int length=90; DatagramPacket pack = new DatagramPacket(data,length); 使用DatagramSocket类创建接收数据的对象 DatagramSocket(int port) 使用receive方法接收数据

29 byte data[ ]=new byte[100]; int length=90;
DatagramPacket pack = new DatagramPacket(data,length); DatagramSocket receiver = new DatagramSocket(980); receiver.receive(pack); 与发送包时定义的端口号一致

30 使用无参数的构造方法创建DatagramSocket类的对象,调用send()方法发送数据。
利用UDP方式进行通信的一般步骤 创建DatagramPacket类的对象将数据打包。 使用无参数的构造方法创建DatagramSocket类的对象,调用send()方法发送数据。 创建DatagramPacket类的对象接收数据包。 创建DatagramSocket类的对象,调用receive()方法接收数据。

31 广播数据包 Internet的地址是a.b.c.d的形式。该地址的一部分代表用户自己主机,而另一部分代表用户所在的网络。
当a小于128,那么b.c.d就用来表示主机,这类地址称做A类地址。 如果a大于等于128并且小于192,则a.b表示网络地址,而c.d表示主机地址,这类地址称做B类地址。 如果a大于等于192,则网络地址是a.b.c,d表示主机地址,这类地址称做C类地址。 与 之间的地址称做D类地址。

32 D类地址并不代表某个特定主机的位置,称做一个组播地址,加入到同一个组播地址的主机可以在某个端口上广播信息,也可以在某个端口号上接收信息。
设置组播地址 使用InetAddress类创建组播组地址 例如:InetAddress group = InetAddress.getByName(" ");

33 使用MulticastSocket类创建一个多点广播套接字对象。
创建多点广播套接字 使用MulticastSocket类创建一个多点广播套接字对象。 public MulticastSocket(int port) throws IOException 设置广播的范围 MulticastSocket类的对象调用 public void setTimeToLive(int ttl) throws IOException ttl的取值范围:0~255 本地网络取值为0

34 加入组播组 MulticastSocket类的对象调用 public void joinGroup(InetAddress mcastaddr) throws IOException 退出组播组 MulticastSocket类的对象调用 public void leaveGroup(InetAddress mcastaddr) throws IOException

35 广播数据 MulticastSocket类的对象调用 public void send(DatagramPacket p) throws IOException 接收数据 MulticastSocket类的对象调用 public void receive(DatagramPacket p) throws IOException

36 使用InetAddress类创建组播组地址。 使用MulticastSocket类的对象创建一个多点广播套接字。
利用广播方式进行通信的一般步骤 使用InetAddress类创建组播组地址。 使用MulticastSocket类的对象创建一个多点广播套接字。 MulticastSocket类的对象调用 setTimeToLive方法设置广播的范围。 MulticastSocket类的对象调用joinGroup方法加入组播组。 MulticastSocket类的对象调用send方法进行广播。 MulticastSocket类的对象调用receive方法接收广播信息。


Download ppt "西南科技大学网络教育系列课程 高级语程序设计(Java) 第十一章 Java 中的网络编程."

Similar presentations


Ads by Google