14.3.1 Sockets概况
1.Socket概念
在客户机/服务器应用程序中,服务器提供像处理数据库查询或修改数据库中的数据之类的服务。发生在客户机和服务器之间的通信必须是可靠的。数据不能丢失,同时数据在客户机上的次序应该和服务器发送出来的次序相同。
传输控制协议(TCP)提供了一条可靠的、点对点的通信通道,客户机/服务器应用程序可以用该通道互相通信。Socket(套接字)是TCP/IP的编程接口,即利用Socket提供的一组API就可以编程实现TCP/IP协议。在Java中,Socket通信采用的流式套接字方式,是使用TCP协议,实现客户/服务器之间双向通信。
Socket称为“套接字”,是指在两台计算机上运行的两个程序之间的一个双向通信的链接点,而每一端称为一个Socket,它提供一种面向连接的可靠的数据传输方式,能够保证发送的数据按顺序无重复地到达目的地。要通过TCP进行通信,客户机和服务器程序建立连接并绑定套接字。套接字用于处理通过网络连接的应用程序之间的通信。客户机和服务器之间更深入的通信通过套接字完成。
2.Socket的通信机制
在Java网络编程中,Socket是一个用于端点连接和数据交换的对象。网络的每一个端点,都可以通过和连接绑定的Socket对象来交换数据。在网络中,Socket可以由IP地址和端口号唯一确定。在客户机/服务器模式下,按照Socket在网络中所起的作用不同,可以将它们分为两类:客户机端Socket和服务器端Socket。
两类Socket的工作过程如下:
1)服务器端。ServerSocket始终在监听是否有连接请求,如果发现客户机端Socket向服务器发出连接请求,且服务器接受服务请求,则服务器端Socket向客户机端Socket发回“接受”的消息。这样,两个Socket对象之间的连接就建立了。
2)客户机端。建立一个和服务器端的连接。这需要客户机端知道服务器的主机名和提供服务的端口号。有了这些信息,当客户机端发出的建立连接的请求被服务器端接受时,客户机上就会创建一个Socket对象。利用这个Socket对象,客户机就可以和服务器进行通信了。
上述服务器端和客户机端的工作过程可以归纳如下:在客户机/服务器模式的网络应用中,客户机端Socket主要用于向服务器端发出连接请求和交换数据。服务器端的Socket始终在监听是否有连接请求,如果发现客户机端Socket向服务器发出连接请求时,且服务器接受服务请求,则服务器端Socket向客户机Socket发回“接受”的消息。这时,一个连接就建立起来了。随后,服务器端Socket和客户机端Socket就可以通过这个连接进行数据的传送。这样的工作过程包含以下四个基本步骤:
(1)创建Socket对象;
(2)打开连接到Socket的输入/出流;
(3)按照一定的协议对Socket进行读/写操作;
(4)关闭Socket对象(即关闭Socket对象绑定的连接)。
其中,第三步是程序员用来调用Socket和实现程序功能的关键步骤,其他三步在各种程序中基本相同。