第一章 系统开发工具简介
第一节 客户机/服务器模型
一、C/S结构简介
客户机/服务器模型,又称为Client/Server模型,简称C/S架构[5]。C/S计算技术在信息产业中占有重要的地位。
它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。客户端的任务是将用户的要求提交给服务器程序,再将服务器程序返回的结果以特定的形式显示给用户。服务器程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序。
二、C/S特点
C/S是客户端/服务器,一般适合于软件开发,对客户端的计算机配置要求比较高,客户端也需要安装软件,比如QQ。C/S架构软件的特点如下:
应用服务器运行数据负荷较轻。C/S体系结构由客户应用程序和数据库服务程序组成,二者分别称为前台程序和后台程序。一旦服务器程序被启动,就随时等待响应客户程序发来的请求;客户应用程序当需要对数据库中的数据进行任何操作时,客户程序就会自动寻找服务器程序,并向其发出请求,服务器程序根据规程做出响应,返回结果,应用服务器运行数据负荷较轻。
数据的储存管理功能较为透明。在数据库应用中数据的储存管理功能是由服务器程序和客户应用程序分别独立进行的。前台应用可以违反的规则,并且通常把那些不同的运行数据,在服务器程序中不集中实现。因此对于工作在前台程序上的最终用户是“透明”的,他们无须干涉背后的过程就可以完成自己的一切工作。在C/S提醒体系下,数据库不能真正成为公共、专业化的仓库,它受到独立的专门管理。
2
第二节 JAVA简介
Java是由SunMicrosystems公司于1995年5月推出的java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、internet计算。从此Java被广泛接受并推动力web的迅速发展,常用的浏览器限制均支持Java applet。
Java平台由Java虚拟机(Java Virtual Machine)和Java应用编程接口(Application Programming Interface,简称API)构成。Java应用在编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件和操作系统平台上安装一个Java平台之后,Java应用程序就可运行。Java应用编程接口已经从1.1X版本发展到1.2版。目前常用的Java平台基于Java1.4,最近版本为Java1.7。
Java分为三个体系J2SE(Java2 Standard Edition),J2EE(Java 2 Platform enterprise Edition),J2ME(Java 2 Micro Edition)。
Java是一种具有简单性(Java语法是C++语法的一个“纯净”版本)、面向对象(面向对象是一种程序设计技术,它将重点放在数据和对象的接口上)、网络技能(Java有一个扩展的例程库,用于处理HTTP和FTP这类的TCP/IP协议)、健壮性、安全性(Java可以构建防病毒、防篡改的系统)、体系结构中立、可移植性、解释型、高性能、多线程的动态语言[6]。
Java的I/O建立于流(stream)之上。输入流读取数据;输出流写入数据。不同的流类如java.io.FileInputStream和sun.net.TeletOutputStream读写某一种数据源。但是所有输入流都有相同的基本方法,所有输入流也使用相同基本方法来读取数据[7]。
Java中的数据流类型有两种:
输出流(OutputStream):输出流数据流经数据从程序送到数据接收者,如可以向显示器屏幕或者文件传输数据。输出流只能写不能读。
输入流(InputStream):程序从外部设备写数据时,使用输入流。输入流将数据从数据源传递给程序,可以从键盘或者文件中获得数据。输入流只能读不能写。
3
第三节 Socket简介
Socket通常被称为“套接字”,用于描述IP地址和端口[8]。Socket是建立在传输层协议(主要是TCP和UDP)上的一种套接字规范[9],Socket接口是TCP/IP网络的API。在网络通信中,如果两台计算机之间是靠一个“通道”通信,那么这个“通道”的两端就是套接字。
Socket是传输层提供的网络进程通信接口,相当于我们现在所用的“插座”,是进程之间通信的抽象连接点。在日常生活中,我们常见到信号插座、电话插座、接收/发送信号(或能量)的插座。Socket就相当于在电话线和电话机之间安放的插座。在网络上,两个程序是靠一个双向链路进行通信,这个双向链路的每一端就成为一个Socket。
进程之间通信,首先要需要建立一个自己的Socket,每个Socket都能进行读/写操作,进行读写操作时就会用到Socket中的输入/输出流[10]。
客户端建立Socket对象步骤:
1、调用 Socket()创建一个流套接字,并连接到服务器端;
Socket s=new Socket(InetAddress.getByName(“服务器的主机名”),port); 2、调用 Socket 类的 getOutputStream()和 getInputStream 获取输出流和输入流,开始网络数据的发送和接收。
OutputStream os=s.getOutputStream(); InputStream is=s.getInputStream(); byte[] buf=new byte[100];
int len=is.read(buf);//从服务器端读取数据 System.out.println(new String(buf,0,len));
os.write(\向服务器端输入数据 3、最后关闭通信套接字。 os.close();is.close();s.close(); 服务器端建立Socket步骤:
1、创建一个服务器端套接字,并绑定到指定端口上; ServerSocket ss=new ServerSocket(int port),
2、调用 accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字。
Socket s=ss.accept();
3、调用 Socket 类的 getOutputStream()和 getInputStream 获取输出流和输入流,开始网络数据的发送和接收。
OutputStream os=s.getOutputStream();
4
InputStream is=s.getInputStream();
os.write(\向客户端发送数据 byte[] buf=new byte[100];
int len=is.read(buf);//从客户端读取数据 System.out.println(new String(buf,0,len));
4、最后关闭通信套接字。 os.close(); is.close(); s.close();
建立连接后,客户端可以发出向Socket写数据的请求,服务器端则会对这个请求进行处理,并将处理结果通过Socket返回。服务器端则会对客户端进行监听,当监听到客户端有连接请求时,客户端就会与服务器端建立一个通信连接。同时,客户端被分配一个与Socket连接的本地端口号,服务器也会获取一个本地端口号。
Socket之通信主要使用TCP和UDP两种协议,UDP和TCP套接字用于传输延迟敏感的,但耐错误的数据流,例如多媒体流的应用程序产生的数据,适不适合的[11]。面向连接的套接字使用的是TCP协议,该协议可以保证数据的可靠传输;无连接的套接字通信使用的是UDP协议,该协议不能保证数据的可靠传输和连接的有效性。
1、使用TCP协议
进行通信必须完成以下过程,如图1.1所示。
客户端
通过Connect方法连接到指定的服务器; 通过write方法向服务器发送服务请求; 通过read从服务端接收数据。
服务器端
使用Bind方法绑定所指定的端口使Socket与一个本地端口相联; 使用 Listen方法监听该端口上的请求;
当监听到用户端发出的连接请求时,调用Accept完成连接的操作; 处理客户端请求后,使用write方法将数据返回给客户端; 建立新的Socket以处理传入的连接请求。
2、使用UDP
通信必须完成以下过程,如图1.2所示。
客户端
通过Connect方法连接到指定的服务器; 通过write方法向服务器发送服务请求; 通过read从服务端接收数据;
5
服务器端
使用Bind方法绑定所指定的端口使Socket与一个本地端口相联; 使用 Listen方法监听该端口上的请求;
当监听到用户端发出的连接请求时,服务器端处理连接请求;
使用write将结果返回到客户端。
Socket()服务器Socket()建立连接Connect()Blind()Read()服务请求Write()Listen()处理服务请求Accept()Write()响应服务Read()阻塞,等待客户请求连接Close()Close()
图1.1 面向连接的客户机/服务器交互过程
6