Java最新实用教程第 12章网络编程基础
Java最新实用教程
2009年 7月 27日星期一 2
学习目的:
了解网络编程基础
初步掌握 Java中的 Socket编程
了解常见的网络服务的实现
掌握 Servlet的编程基础
了解 Java的 J2ME和 J2EE编程平台
学习重点:
掌握网络编程中的基本概念
掌握 Socket编程的实现
掌握 Servlet编程基础
Java最新实用教程
2009年 7月 27日星期一 3
第 12章 网络编程基础本章提要:
1,Java网络编程基础
2,客户 /服务器编程
3,Socket编程实现
4,Java Servlet编程基础
5,J2ME和 J2EE概述
Java最新实用教程
2009年 7月 27日星期一 4
1,网络体系结构
12.1网络程序设计基本概念网络编程中有以下常用概念
2,协议 (Protocol)
3,OSI参考模型
4,IP地址和域名
5,服务
Java最新实用教程
2009年 7月 27日星期一 5
12.2 服务器和客户机
12.2.1 WinSock程序服务器是提供服务的计算机,客户机是发出请求的计算机
12.2.2 端口( Port)
12.2.3 Socket套接字
12.2.4 服务器和客户机程序
12.2.5 服务多客户
12.2.6 数据报
Java最新实用教程
2009年 7月 27日星期一 6
1,ServerSocket
构造函数
public ServerSocket(intport) throws IOException
以指定的端口创建一个服务器端的 Socket对象,负责进行监听和应答客户机请求等操作。
该对象的 accept()方法可以应答客户机的请求,并返回一个 Socket对象,可以负责与客户机进行通信。
public Socket accept() throws IOException
12.2 服务器和客户机
Java最新实用教程
2009年 7月 27日星期一 7
2,Socket
Socket的构造函数和主要方法如下:
public Socket(Stringhost,intport)
throws UnknownHostException,IOException
public void close() throws IOException
public InputStream getInputStream() throws
IOException
public OutputStream getOutputStream() throws
IOException
12.2 服务器和客户机
Java最新实用教程
2009年 7月 27日星期一 8
3,数据通信数据的读和写都是以流的方式进行的 。
BufferedReader is = new BufferedReader(new
InputStreamReader(socet.getInputStream()));
DataOutputStream os = new
DataOutputStream(socket.getOutputStream());
数据读写操作
os.writeBytes(“Hello,server!\n”);
is.readLine();
12.2 服务器和客户机
Java最新实用教程
2009年 7月 27日星期一 9
4,数据报 UDP
public DatagramSocket(int port) throws
SocketException
public void close(),关闭数据报套接字 。
public void send(DatagramPacket p) throws
IOException,发送一个数据包 。
public void receive(DatagramPacket p) throws
IOException
public DatagramPacket(byte[]buf,intlength)
12.2 服务器和客户机
Java最新实用教程
2009年 7月 27日星期一 10
11.3.1 Socket
12.3 网络程序设计技术信息在一个进程的 Socket和另一个进程的 Socket间,
以报文传输的形式进行交换 。 在发送端 Socket,报文以队列的形式等待,直到网络协议传输它们 。 当报文到达到后,它们又在接收端的 Socket排队,等待接收进程以一定的系统调用来接收它们 。 在 C/S模式下,服务器是监听请求的进程,客户是发送请求的进程 。 一旦服务器进程接收到了请求,它就试图去处理该请求,并且将输出发送给客户 。
Java最新实用教程
2009年 7月 27日星期一 11
11.3.2 RPC
12.3 网络程序设计技术通过 RPC我们可以充分利用非共享内存的多处理器环境
( 例如通过局域网连接的多台工作站 ),这样可以简便地将应用分布在多台工作站上,应用程序就像运行在一台多处理器的计算机上一样 。 就可以方便的实现过程代码共享,提高系统资源的利用率,也可以将大量数值处理的操作放在处理能力较强的系统上运行,从而减轻前端机的负担 。
Java最新实用教程
2009年 7月 27日星期一 12
11.3.3 Ping程序
12.3 网络程序设计技术
Ping是 Packet InterNet Groper的缩写,是一个建立在 UNIX系统中的程序,作用是通过向远程主机发送 ICMP
echo请求并等待一个响应,来检查远程主机是否可到达

Java最新实用教程
2009年 7月 27日星期一 13
11.3.4 FTP客户端程序
12.3 网络程序设计技术
FTP是文件传输协议的缩写,FTP是目前进行资源共享的一种广泛形式 。 FTP协议是基于 TCP的,也就是基于连接的,可靠性更高,所以,使用 FTP首先是要在客户端和服务器这间建立一个连接,然后基于 TCP进行通信 。 通信中可以二进制模式传输,也可以以其它格式传输 。
Java最新实用教程
2009年 7月 27日星期一 14
12.4 Servlet编程基础
12.4.1 Servlet容器,Web服务器和应用服务器在服务器中,存在线程池,可以提高效率,而对这些线程池进行管理的,在 J2EE模型中,这部分工作由 Servlet
容器完成在基于 WEB服务的网络中,处于服务器的端,则称为 WEB
服务器。
在一个完整的 J2EE的系统框架中,需要提供交易完整性
、可靠性、互用性、安全性和可伸缩性,而提供这些底层关键服务的服务器被称为应用服务器。
Servlet是基于 HTTP的一种请求响应。
Java最新实用教程
2009年 7月 27日星期一 15
12.4 Servlet编程基础
12.4.2 Servlet的基本结构任何一个 Servlet必须从 HttpServlet进行派生,
HttpServlet封装了编写基于 HTTP协议 Servlet的大部分功能。其中有一个方法 doGet(),用来处理 HTTP GET请求;
还可以处理 HTTP POST请求,相关的方法是 doPost()。
Java最新实用教程
2009年 7月 27日星期一 16
12.4.3 Servlet的编译和安装
( 1) 将上节中的文件以 HelloWorld.java存放到应用服务器的 WEB-INF\classes下。
( 2) 编辑服务器的 WEB-INF下的 web.xml,增加 Servlet的声明,并需要创建一个 Servlet的映像 。
( 3) 在浏览器地址栏输入访问地址:
http://localhost:8080/firstservlet
12.4 Servlet编程基础
Java最新实用教程
2009年 7月 27日星期一 17
12.4.4 Servlet的生命周期
1,在服务器启动后,Servlet被客户首次请求被加载 。
2,从线程池中分配一个 Servlet实例来服务客户端 。
3,服务器调用 Servlet的 init()方法来初始化
4,服 务 器 调 用 Servlet 的 service( ) 方法 。 如
doGet()或 doPost()方法 。
5,当服务器停止服务或者因其它操作需要卸载 Servlet时
,将会调用 Servlet的 destroy()方法 。
12.4 Servlet编程基础
Java最新实用教程
2009年 7月 27日星期一 18
12.4.5 与客户端的交互通过 HttpServletRequest和 HttpServletResponse分别用来处理客户端的信息,和向客户端发出响应信息 。
1,HttpServletRequest类的常用方法
getCookies()
getSession()
2,HttpServletResponse类的常用方法
PrintWriter getWriter()
12.4 Servlet编程基础
Java最新实用教程
2009年 7月 27日星期一 19
12.5 客户端跟踪
12.5.1 使用 Cookie
1,设置 Cookie
Cookie cookie = new Cookie("userName",”Mike”);
response.addCookie(cookie);
2,读取 Cookie
Cookie[] cookieArray = request.getCookies();
String s = cookieArray[i].getValue();
Servlet提供 Session 和 Cookie并跟踪客户端。
Java最新实用教程
2009年 7月 27日星期一 20
12.5.2 使用 Session
可以使用下面代码来在 Servlet中读取和修改 ( 设置 )
Session对象 。
HttpSession session = request.getSession(); String
myName = "Mike";
String sessionName =
(String)session.getAttribute("userName");
session.setAttribute("userName",myName);
12.5 客户端跟踪
Java最新实用教程
2009年 7月 27日星期一 21
12.6.1 Applet与 Servlet的通信
1.通过 HTML页面传递
2.通过 java.net包创建套接字通信
3.使用 RMI( 远程方法调用)
4.使用 CORBA( 通用对象请求代理)
Java程序之间并不是孤立的,在网络上实现互联互通
,这才是 Java最强大的功能。
12.6 协作与通信
Java最新实用教程
2009年 7月 27日星期一 22
12.6.2 Servlet间的信息共享服务器上需要为多个用户的 WEB应用维持相同状态的时候,需要使用 Servlet上下文( Context)。
读取和写入 ServletContext的代码可能如下:
ServletContext application =
this.getServletContext();
application.setAttribute(“Counter”,new
Integer(10));
Integer s=
(Integer)application.getAttribute(“Counter”);
12.6 协作与通信
Java最新实用教程
2009年 7月 27日星期一 23
思路:
在服务器端需要一个主线程来提供监听服务,然后对每一个可以接受的请求创建一个服务套接字来与之通信,
通信结束时关闭套接字。所以在服务器端需要自定义两个类,一个是服务器监听线程(可以和界面一起完成),另一个是服务器端的服务线程(在程序中,我们把它定义为一个内部类)。
例 12-5 使用 Sokcet编写一个可视化的 Java聊天程序。
12.7 网络编程实例
Java最新实用教程
2009年 7月 27日星期一 24
12.7 网络编程实例聊天服务器
Java最新实用教程
2009年 7月 27日星期一 25
12.7 网络编程实例聊天客户端
Java最新实用教程
2009年 7月 27日星期一 26
1,J2EE简介
Java平台有 J2SE,J2EE和 J2ME三种版本。
12.8 J2EE和 J2ME简介
Java最新实用教程
2009年 7月 27日星期一 27
2,J2ME简介
12.8 J2EE和 J2ME简介
Java最新实用教程
2009年 7月 27日星期一 28
12.9 本章小结第 1节介绍了网络编程的基本概念;第 2节说明了在传统的 C/S模式中编程的基本思路和方法;第 3节简单描述了网络编程中的几种常用技术,比如 Socket和 FTP等;第 4节对当前企业平台应用中常见的技术 Servlet,给出了 WEB容器
,Servlet容器还有应用服务器等概念;第 5节继续介绍
Servlet,需要掌握 Servlet与客户端进行交互的两种方法
,Session和 Cookie; 第 6节介绍在 Servlet中如何与其它应用程序进行通信的方法,并给出了实例;第 7节用一个基于 Socket的 Swing界面的网络聊天程序实例,来说明如何完成一个网络程序的编写;第 8节概述了 Java平台的另外两种规范 J2EE和 J2ME,分别完成企业级应用和微型设备
,移动设备的程序编写等 。