之前介绍了一种面向无连接的通信服务API,接下来将介绍面向连接的、可靠的通信服务API—— Socket。
套接字(Socket)允许程序将网络连接当成一个流,可以向这个流中写入数据,也可以从这个流中读取数据。另外,套接字在网络程序开发中较为简单,因为它屏蔽了网络的底层细节,如媒体类型信息包的大小,网络地址信息的重发等。Java中有两类套接字,一种是客户端套接字(Socket),一种是服务器套接字(ServerSocket)。
在Java的java.net 包提供了一个用于实现客户端套接字的类Socket.java,该类的构造方法如下:
1.Socket()
使用无参构造方法创建Socket对象时,因为没有指定IP地址和端口号,仅仅只是创建了客户端对象,还没有连接到任何服务器。因此,如果使用这种方式构造对象,在后续还需调用connect(SocketAddress endpoint)方法来连接到指定服务器,其中参数endpoint表示一个套接字地址,包含了服务器的IP地址和端口号。
2.Socket(String host, int port)
该构造方法在创建Socket对象时,会连接到指定服务器地址和端口上,其中参数host表示一个字符串类型的IP地址(服务器地址),参数port表示为该程序提供服务的端口号。
3.Socket(InetAddress address, int port)
该构造方法与第二个构造方法类似,参数address用于接收一个InetAddress类型的对象,此对象中应封装服务器的IP地址。
提示:
在创建Socket时如果发生错误,可能会抛出IOException异常。另外,在指定端口的时候,建议选择注册端口(范围是1024~49 151)以免发生端口冲突。
除此之后,Socket类还提供一些用于操作连接和传输数据的方法,如表13.10所示。
表13.10 Socket的常用方法
(www.daowen.com)
表13.10中列举了Socket类的常用方法,其中getInputStream()和getOutputStream()方法分别用于获取输入流和输出流。当客户端和服务端建立连接后,数据是以I/O流的形式进行交互的,因此需要通过获取输入流来读取交互数据,或者获得输出流来写入交互数据,其交互的示意图如图13.10所示。
图13.10 数据交互示意图
提示:
服务器端的Socket是通过ServerSocket对象的accept()方法获得。
一般情况下,Socket的工作步骤如下:
(1)根据指定IP地址和端口创建一个Socket对象。
(2)调用getInputStream()方法或者getOutputStream()方法获得输入/输出流。
(3)与服务器进行数据交互,直到连接关闭。
(4)关闭客户端Socket。
以下是创建客户端Socket的代码片段:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。