这周学习了Java网络编程和XML解析技术。计算机网络是处于不同地理位置的计算机系统通过通信设备和线路连接起来,以网络软件实现资源共享的系统。计算机网络出现的早起,由于软硬件厂商各自标准的不同,不同的网络产品之间互联时会遇到不兼容问题,针对此类问题,国际标准化组织ISO提出了一个OSI(开放互联系统)的参考模型,此模型采用分层结构,共分为七层。但此模型过于复杂庞大,在此基础上,技术人员开发出了TCP/IP分层模型,这也是目前因特网范围内运行的J唯一一种协议,该模型共有四个系一层:网络接口层、网络互联层、传输层、应用层。其中传输层负责数据传输,该层中包含两种协议:TCP代表传输控制协议(Transfer Control protocol),UDP代表用户报文协议(User Datagram Protocol)。二者的区别在于,TCP协议是一种一问一答的模式,两个程序之间的通讯是可靠的,而UDP协议则是一种非连接协议,数据发送方单方面将数据发出,但对方能否接收到数据则是不确定的,因此程序之间的通讯是不可靠的。在互联网通信中,客户端是通信的发起者,服务器被动的等待客户端发起通信,并对其做出响应,客户端与服务器互为对等端,但二者有着明显区别,客户端首先需要知道服务器的地址和端口号,反之则不然,服务器可以通过使用套接字API,从收到的客户端通信消息中获取客户端的相关信息。而一旦通信连接建立成功,二者之间就没有区别了。Socker(套接字)是一种抽象层,应用程序通过它来发送和接收数据,一个TCP/IP套接字由一个IP地址、一个端对端协议(TCP或UDP协议)以及一个端口号唯一确定。当使用TCP套接字编程时,有以下步骤:1.服务器初始化一个ServerSocket对象,指定通讯将要发生在哪个端口号。2.服务器调用ServerSocket的accep()方法,该方法是阻塞式的,会一直等待知道有一个客户端连接到服务器上的指定端口。3.服务器等待的同时,客户端实例化一个Socket对象,指定要连接的服务器和端口号。4.Socket类的构造器会试图连接到指定的服务器和端口号,如果连接成功,那么客户端中也会有一个用来与服务器通讯的Socket对象。5.一旦有客户端连接到预定的端口,那么服务器中ServerSocket的accept()方法会返回一个Socket对象。在连接建立之后,通讯通过I/O流发生,每个Socket套接字都有一个OutputStream和一个InputStream,客户端的OutputStream连接到服务器的InputStream,客户端的InputStream连接到服务器的OutputStream,不论客户端还是服务器,都是通过其对应的InputStream读取数据,通过OutputStream发送数据,因为TCP协议是一个双向通讯协议,所以数据可以同时通过两个流生。对于UDP套接字编程,数据包包的发送者和接收者都需要使用java.net.DatagramSocket类来接收和发送包。XML(可扩展标记语言,eXtended Markup Language)是一种允许Web应用程序考法人员创建自定义标记,以便更有效组织和传递内容的语言。一个XML文档由两个部分组成:一部分是序言,包括XML文档声明、注释、空白;另一个部分是文档元素,这两个部分是必须的。XML文档声明由"<?xml “开始,以"?>"结束,XML声明有版本号、独立文档声明和编码声明三个属性。属性是由等号分开的名称数值对,位于等号左边的是属性名,等号右边的是值,并用双引号括起来。版本声明必须排在第一位,目前仅1.0唯一可用,XML声明是严格区分大小写的。XML解析技术使用的两种基本API是:文档对象模型(DOM)和XML简单API(SAX)。DOM是一种基于树结构的API,它是基于对象的,与语言和平台无关,DOM的一个显著特点是整个文档必须在内存中解析和存储。SAX则是事件驱动。SAX解析器使用回调机制来通知客户端应用程序,而非将整个文档都存在内存中,这样即使是处理大型文件也不会占用大量内存,由于SAX不创建显式数据结构,因此它比DOM效率更高,SAX的缺点有:SAX是只读的,被设计来读取XML文档而非写入,且文档只能遍历一次。
原文:http://www.cnblogs.com/hypnotizer/p/5559568.html