一、Socket的解释及形象比喻
在Internet上的主机一般运行了多个服务软件,同时提供了几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应不同的服务。
Socket正如其英文原意那样,像一个多孔插座,一台主机犹如一间布满各种插座的房间,每个插座都有一个编号。客户软件将插头插到不同编号的插座,就可以得到不同的服务。
二、什么是Socket
所谓Socket通常称作“套接字”,网络通过“套接字”向网络发出请求或应答网络请求。Socket和ServerSocket类库位于java.net包中,ServerSocket用于服务器端,Socket是建立网络连接用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作则个实例,完成所需的对话。
三、重要的Socket API
使用最频繁的3个方法:
Accept方法:用于产生“阻塞”,直到接收到一个连接,并且返回一个客户端的Socket对象实例。(“阻塞”是一个术语,它使程序运行暂时“停留”在这个地方,直到一个会话产生,然后程序继续)。
getInputStream方法:获得网络连接输入,同时返回一个InputStream对象实例。
getOutputStream方法:连接的另一端将获得输入,同时返回一个OutputStream对象实例。注意getInputStream和getOutputStream这两种方法均可能会产生一个IOException.
四、Socket连接过程
可以分为3个步骤:服务器监听、客户端请求、连接确认。
服务器监听:是服务器端并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
客户端请求:客户端首先要描述要连接的服务端的套接字,指出服务器端的地址和端口号,然后就向服务端套接字提出连接要求。
连接确认:是指当服务器端套接字监听到或者接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户确认了此描述,连接就建立好了。而服务端的套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。