收藏 分享(赏)

网络编程用户网络程序设计.ppt

上传人:kpmy5893 文档编号:9176453 上传时间:2019-07-26 格式:PPT 页数:47 大小:179KB
下载 相关 举报
网络编程用户网络程序设计.ppt_第1页
第1页 / 共47页
网络编程用户网络程序设计.ppt_第2页
第2页 / 共47页
网络编程用户网络程序设计.ppt_第3页
第3页 / 共47页
网络编程用户网络程序设计.ppt_第4页
第4页 / 共47页
网络编程用户网络程序设计.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

1、第 3 章,用户网络程序设计,知识点,TCP/IP协议的分层结构 IP地址与域名 Java中URL对象的创建及使用 编写SOCKET客户机/服务器的应用程序,TCP/IP协议的分层结构,每一层负责不同的通信功能 URL就是Java基于应用层的一种网络应用的实现 Socket是TCP/IP协议中的传输层接口。,IP地址与域名,TCP/IP协议中定义了一种通用的地址编码方案,即IP地址。可以惟一区分每一台计算机。例:166.111.136.3 建立IP地址和主机名之间的映射关系。主机名就是平时所说的域名。如:,1、URL的使用,URL称为统一资源定位器,是对Internet某资源的一个引用(地址)

2、。 J包含有一个称为URL的类,在程序中可用它代表一个URL地址。 所有的URL拥有两个主要的组成部分:协议标识符和资源名称即:protocolID : resourceName 例:http:/ / / # , 传输协议,常用的标识符有:FILE,HTTP,FTP,TELNET,WAIS,NEWS,MAILTO等。 文档和服务所在的主机名,即域名系统DNS中的“点”地址(域名或IP地址),如: 172.17.98.1 服务端口号,各种网络协议有自己相应的端口号,http的默认端口号为80;FTP为21;Telnet为23等。 如果采用相应的默认端口(80),端口号可以忽略。,建立一个URL,

3、在Java的网络类库中,URL类提供了对URL进行解析的方法。在程序中可用一个String建立一个URL对象。打开对它的一个连接,然后在这个连接中读入和写出信息。 建立一个绝对URL对象。 创建一个相对URL对象。 为文件中的命名“锚点”建立了一个URL对象。,建立一个绝对URL,由一个绝对的URL地址创建URL对象。 已知一个网点为 http:/URL gamelan = newURL(“http:/”);表示一个绝对URL,包含了到达资源所需的所有信息。,URL字符串,建立一个相对URL,由一个相对的URL地址创建URL对象。假定程序中已经创建了一个URL对象,还已知同网点中的一个文件为:

4、Gwork.html URL gamelan = new URL(“http:/”); URL gamelanNetwork = new URL(gamelan, “Gwork.html”);只包含到达对于另一个URL(或处于另一个URL上下文之中)的资源的足够信息。,建立一个带“锚点”的URL,为一个文件中的命名“锚点”(作为引用)创建URL对象。 假定Gwork.html文件中,在它的底部有一个称为BOTTOM的锚点,所创建的URL对象为: URL gamelanNetworkBottom = newRUL(gamelanNetwork, “#BOTTOM”); BOTTOM前的字符#是必

5、需的。,URL构造函数的一般形式,创建URL对象使用了URL类的构造函数。 一般形式:,其中: 指定新URL基址的一个URL对象 是一个字符串,设定相对于这个基址的资源名字的剩余部分。 注意:如果baseURL为null,构造函数将relative URL视为一个绝对URL指定。如果relative URL是一个绝对URL设置,那么构造函数忽略baseURL。,获得URL对象属性,在成功建立一个URL对象以后,可通过URL类提供的方法获取对象的各种属性。 Public String getProtocol() /协议名称 Public String getHost() /主机名称 Public

6、 String getPort() /端口号 Public String getDefaultPort() /协议的默认端口(未指定端口时) Public String getFile() /完整文件名 Public String getRef() /URL引用 Public String getUserInfo() /用户信息部分 Public String toString() /获取整个URL字符串 不包含的属性返回null,没有端口号时,getPort()返回-1。,获取URL对象属性,import .*; public class urltest public static void

7、 main(String args) URL url;try url = new URL(“file:D:/jdk1.4/docs/api/index.html#chapt1”); / file协议info(url);url = new URL(“http:/jdk1.4/docs/api/index.html#chapt1”); / http协议info(url);catch(MalformedURLException me) /参数有错,非运行时异常System.out.println(“MalformedURLException : ” + me); public static void

8、 info(URL url) System.out.println(“toString() = ” + url.toString); / 其它属性 / URL创建后仅代表一个网络资源,直接从URL读取内容,在成功建立一个URL以后,调用URL对象的openStream方法与指定的URL建立连接并获得一个输入流,从中可读取这个URL的内容(即资源文件的内容,即数据)。 openStream方法返回一个java.io.InputStream对象。 使用InputStream方法从一个URL中读取内容。 下列程序运行结果:直接打开一个输入流的方法,import .*; import java.io.

9、*; public class openStreamTest public static void main(String args) try URL yahoo = new URL(“http:/”);/根据URL建立一个数据输入流DataInputStream dis=new DataInputStream(yahoo.openStream();String inputLine;while(inputLine=dis.readLine() != null) /从流中读取一行显示System.out.println(inputLine);dis.close(); catch(Malforme

10、dURLException me) /参数有错,非运行时异常System.out.println(“MalformedURLException : ” + me); catch(IOException ioe) System.out.println(“IOException : ” + ioe); /注意:只有在网络连通的情况下可执行,直接打开一个输入流的方法,如果想得到更多的有关站点资源的信息,或者需要向服务器输出自己的数据的话,URL类就无能为力了,这时需要使用URLConnection对象。 该对象封装了从本机到Web对象的活动的HTTP连接,是以HTTP协议为中心的类。 URLConn

11、ection 对象是一个访问远程资源的类。,连接一个URL,在成功创建一个URL之后,调用该URL对象的openConnection方法返回一个用于URL的URLConection对象与它连接,建立起程序与该URL之间的网络通信链接。 try / 建立连接URL yahoo = new URL(“http:/”);URLConnection yc= yahoo.openConnection(); /创建对象 catch(MalformedURLException e) / new URL() failed catch(IOException e) / openConnection() fail

12、ed ,读写URLConnection,URLConnection类包含许多与URL进行网络通信的方法。(见后) 它是一个抽象类,不能直接对它实例化。要使用URLConnection类必须先创建一个URL对象。,1)从URLConnection读取 显示地开通与URL的一个连接,获得这个连接的输入流。,import .*; import java.io.*; class ConnectionTest public static void main(String args) try URL yahoo = new URL(“http:/”);URLConnection yahooConnecti

13、on = yahoo.openConnection();/建立连接DataInputStream dis=new DataInputStream(yahooConnection.getInputStream();String inputLine;while(inputLine=dis.readLine() != null) System.out.println(inputLine);dis.close(); catch(MalformedURLException me) System.out.println(“MalformedURLException : ” + me); catch(IOE

14、xception ioe) System.out.println(“IOException : ” + ioe);,用getInputStream()方法和getOutputStream()方法得到指定资源的输入和输出流,2) 往URLConnection写,Java程序可以与服务器端的cgi-bin脚本交互作用。能简单地写URL,为服务器提供数据; 实现步骤: (1)创建一个URL。 (2)开通对URL的一个连接。 (3)从这个连接获得一个输出流。输出流被连接到服务器上cgi-bin脚本的标准输入流。 (4)写入这个输出流。 (5)关闭这个输出流。,import .*; import jav

15、a.io.*; class ReverseTest public static void main(String args) try if(args.length != 1) System.err.println(“Usage: Java ReverseTest ”+”string_to_reverse”);System.exit(1);String stringToReverse = URLEncoder.encode(args0);URL url = new URL (“http:/ connection = url.openConnection();PrintStream outstre

16、am = new PrintStream(connection.getOutputStream();outstream.println(“String=”+stringToReverse);outstream.close(); /关闭输出流,DataInputStream inStream=new DataInputStream(connection.getInputStream();String inputLine;while(inputLine=inStream.readLine() != null) System.out.println(inputLine);inStream.close

17、(); catch(MalformedURLException me) System.err.println(“MalformedURLException : ” + me); catch(IOException ioe) System.err.println(“IOException : ” + ioe); ,URLConnection类的实例方法,URLConnection的特点是以HTTP协议为中心的类。 openConnection方法声明: (创建对象)public URLConnection openConnection() throws IOException 实例方法: pub

18、lic Object getContent() IOException /获取资源内容 public int getContentLength() /获取资源信息的长度 public String getContentType() /获取资源信息的类型 public long getData() /获取资源的当前日期 public long getLastModified() /获取资源的最后修改日期 public InputStream getInputStream() throws IOException /输入流 public OutputStream getOutputStream()

19、 throws IOException /输出流,2. 编写客户机/服务器的应用程序,Socket是实现客户-服务器(Client/Server)模式的通信方式; 这种通信模式首先要创建一个Socket类,利用这个类实例建立一条可靠链接,以流的方式传输数据; 这种服务模式是目前广泛应用于各种应用环境的分布计算模式; Java提供了极其方便的客户机/服务器编程机制;,Socket通信的基本概念,建立连接 两台计算机分别运行不同的程序,由一端发出请求,由另一端等候连接请求,当等候端收到请求并接受请求后,两个程序则建立起一个连接,通过这个连接可以进行数据交换。请求方称为客户端,接收方成为服务端。 这

20、是计算机通信的一个基本机制,称客户/服务器模式。,基本概念,连接地址 能够惟一识别对方机器的地址,就是计算机的名称或地址。 在Internet网中,计算机的惟一标识是IP地址。 一台机器上可能会启动多个程序,必须为每个程序分配一个惟一的端口号。 一个完整的连接地址:计算机的IP地址+连接程序的端口号,基本概念,端口号 在TCP/IP系统中,端口号由16位整数组成,范围是065535。其中前1024个端口已预先定义特殊服务程序。其余端口可自由分配。 例:80:web服务,21:ftp服务,110:pop3服务 连接之前约定好端口。 端口号由服务器端分配,并等候请求。 客户端使用该端口号发出请求。

21、 两个程序的端口号一致,连接成功。,什么是Socket,一个Socket是在网络上运行的两个程序之间的双向通信链中的一个端点(套接字)。 Java提供了相应的Socket编程方法。用Java既可以编写服务端程序又可以编写客户端的程序。 服务端套接字使用ServerSocket类;客户端套接字使用Socket类。,Java的TCP/IP协议下Socket通信模式,服务端,客户端,ServerSocket(port#),ServerSocket.accept(),Socket(),OutputStream,InputStream,ServerSocket.close(),Socket(host,p

22、ort#),Socket.Close(),在指定端口注册服务器端的套接字,在指定端口等待连接,建立Socket连接,停止ServerSocket服务,向指定计算机和端口号发出连接请求,Socket.close(),关闭Socket连接,InputStream,OutputStream,通过流进行数据交换,编写服务端的程序,Java中的ServerSocket类提供了服务端的Socket接口。 例中提供了一个模拟FTP服务器的服务软件。只提供了最简单的建立FTP连接的功能。 借用Windows本身提供的FTP客户软件来测试这个模拟的FTP服务程序。,import java.io.*; impor

23、t .*; public class ftpserver public static void main(String args ) try ServerSocket ftpserv = new ServerSocket(21); Socket fs = ftpserv.accept(); PrintStream fs_out=new PrintStream(fs.getOutputStream(); DataInputStream fs_in = newDataInputStream(fs.getInputStream();,这4个语句可作为编写服务端程序的一个范式,Ftpserver.ja

24、va,fs_out.println(“Welcome to the test server”);System.out.println(“got follow infor from client:”+fs_in.readLine();fs_out. println(“331 Please send Password”);System.out.println(“got follow infor from client:”+fs_in.readLine();fs_out. println(“230 Login OK”);System.out.println(“got follow infor fro

25、m client:”+fs_in.readLine(); catch(Exception e) System.out.println(e); ,按照约定的协议对输入输出流进行读写操作,Ftpserver.java,测试该程序,可以在一台安装了Window98并配置了TCP/IP协议的微机上进行。(两个DOS窗口),C:WINDOWSsystem32ftpftp 202.207.208.8 Connected to 202.207.208.8 Welcome to the test server User(202.207.208.8:(none): anonymous 331 Please se

26、nd Password Password:(输入真实的Email地址) 230 Login OK ftpbye,c:j2sdk1.4.0binjava ftpserver got follow infor from client: USER anonymous got follow infor from client: PASS (输入真实的Email地址) got follow infor from client: QUIT,客户端:,模拟FTP服务器:,说明: 创建一个服务器端的Socket,将其绑定到21端口;一直等待客户端的连接。 利用accept()方法接受客户端的连接; 为建立的连

27、接打开一个输出流; 为建立的连接打开一个输入流; 按照约定的协议对输入输出流进行读写操作,其中:USER,PASS,QUIT分别为协议规定的编程者账号、口令及退出的命令。,以上可看出客户端和服务器端对话的简单过程。 这里省略了服务端对用户及口令的检验以及根据客户端输入的不同命令执行各种操作。,编写客户端的程序,自己编写一个客户端的程序: 使用一个自己定义的简单协议:服务器使用一个空闲的端口 8886。 客户端连接后: (1)服务端向客户端发送一条信息; (2)客户端读取服务端的信息并显示,再向服务端发送一条反馈信息; (3)服务端读取客户端的反馈信息并显示。,import java.io.*;

28、 import .*; public class Server public static void main(String args ) try ServerSocket server_1 = new ServerSocket(8886);Socket socket_s = server_1.accept();PrintStream server_out=new PrintStream(socket_s.getOutputStream();DataInputStream server_in = newDataInputStream(socket_s.getInputStream();serv

29、er_out.println(“This is infor sent by server r”);String s1 = server_in.readLine();System.out.println(“got follow infor from client:”+s1); catch(Exception e) System.out.println(e); ,服务端的程序 Server.java,import java.io.*; import .*; public class Client public static void main(String args ) try Socket so

30、ck_1 = new Socket(“202.207.208.8”, 8886); DataInputStream client_in = new DataInputStream(sock_1.getInputStream(); DataOutputStream cl_out = new DataOutputStream(sock_1.getOutputStream(); PrintStream client_out = new PrintStream(cl_out);,客户端的程序 Client.java,这4个语句可作为编写客户端程序的一个范式,String s1 = client_in.

31、readLine();System.out.println(“got follow infor from server :”+s1);client_out.println(“This is infor sent by client r”); catch(Exception e) System.out.println(e); ,客户端的程序 Client.java,按照约定的协议对输入输出流进行读写操作,说明: 创建一个客户端的Socket,与(202.207.208.8)主机建立一个连接。要求与服务器端的Socket所绑定的端口号相对应。 为Socket创建一个输入流; 为Socket创建输出

32、流; 按照约定的协议对输入输出流进行读写操作。readLine()-读取服务端发送的字符串println(”.”)-向服务器发送,测试时,既可以在通一台微机上开两个DOS窗口,也可以在两台联网的微机上进行。执行效果: 客户端: c : j2sdk1.4.0bin java Client Got follow infor from server : This is infor sent by server服务端: c : j2sdk1.4.0bin java Server Got follow infor from client : This is infor sent by client,可以

33、为前面的模拟FTP服务程序编写一个客户端程序。 见 Ftpc.java,import java.io.*; import .*; public class Ftpc public static void main(String args ) try Socket sock_1 = new Socket(“202.207.208.8“, 21);DataInputStream client_in = new DataInputStream(sock_1.getInputStream();DataOutputStream cl_out = new DataOutputStream(sock_1.g

34、etOutputStream();PrintStream client_out = new PrintStream(cl_out);StringBuffer buf = new StringBuffer(50);,int c;String fromServer,usertyped;while(fromServer=client_in.readLine() != null)System.out.println(“Server :“+fromServer);while(c = System.in.read() != n) buf.append(char)c); usertyped = buf.to

35、String();client_out.println(usertyped);client_out.flush();buf.setLength(0); catch(Exception e) System.out.println(e); ,反复读取客户端的输入,发送至服务器,练习题: 1. 什么是URL? URL地址的格式如何?其标识符代表什么? 2. URLConnection类与URL类有何区别?编写一个URLConnection实例程序,获取接受内部的相关信息,并且显示出来。 3. 什么是Socket ? 试举例说明它的功能和使用方法。 4. 编写一个类ReadUrlTest,这个类显示地

36、打开与(URL: http:/ 在实用中,服务器端应能对客户端不同的输入作出不同的响应。 试编写一个服务端处理客户端请求的程序。 协议如下:客户连接后, 服务端发出“Welcome to Time server”信息; 客户端读取用户输入,发送给服务端,如果客户端输入为hours,则发送当前小时数至客户端;如果客户端输入为Minutes、Years、Month、Day、Time、Date、down,则分别发送分钟数、年份、月份、日期、十分秒、年月日至客户端;客户端输入down则结束会话。(端口8885),6. 利用URL对象读取网上的资源(下载)文件 设计步骤:1)设置窗口界面2)事件处理3)提取文件的信息(主机(服务器)名、主机IP地址、下载使用的协议名称、端口号、文件名等)4)资源文件的读取和保护(文件下载到当前目录下),

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

当前位置:首页 > 企业管理 > 管理学资料

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


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

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

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