之前介绍过UDP网络程序,现在我们来看一下TCP网络程序,需要了解以下几点:
l TCP网络程序的工作原理
l ServerSocket类
l Socket类
首先来看下工作原理。
利用UDP通信的2个网络程序是平等的,没有主从之分,这2个程序完全可以是同一个程序的2个运行实例。而利用TCP通信的2个网络程序,是有主从之分的,一个称为服务器程序,另外一个称之为客户端程序。必须先有服务器端,客户端执行相关操作。它们之间的交互过程如下图:
(1) 服务器程序创建一个ServerSocket,然后调用accept方法等待客户端来连接
(2) 客户端程序创建一个Socket并请求与服务器建立连接。
(3) 服务器接收客户端的连接请求,并创建一个新的Socket与该客户端建立专线连接。
(4) 建立了连接的2个Socket在一个单独的线程(由服务器程序创建)上对话。
(5) 服务器开始等待新的连接请求,当新的连接请求到达时,重复步骤(2)到(5)的过程。
下面我们来看一下服务器端ServerSocket类相关的信息。
常用构造函数有以下几个:
--ServerSocket() 创建非绑定服务器套接字。
--ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
--ServerSocket(int port, int backlog) 利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号。
--ServerSocket(int port, int backlog, InetAddress bindAddr) 使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。
常用方法如下:
. bind(SocketAddress endpoint) 将 ServerSocket 绑定到特定地址(IP 地址和端口号)。
. close() 关闭此套接字,释放占用资源。
. accept() 侦听并接受到此套接字的连接。
下面是客户端Socket类的常用构造函数:
--Socket() 通过系统默认类型的 SocketImpl 创建未连接套接字
--Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
--Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。
--Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
创建一个套接字并将其连接到指定远程地址上的指定远程端口。
--Socket(String host, int port, InetAddress localAddr, int localPort)
创建一个套接字并将其连接到指定远程主机上的指定远程端口。
常用方法:
.connect(SocketAddress endpoint) 将此套接字连接到服务器。
.close() 关闭此套接字。
.getInputStream() 返回此套接字的输入流。
.getOutputStream() 返回此套接字的输出流。
最后,需要注意的是,TCP服务器程序必须先启动执行,客户端程序才能 连接上服务器。
版权声明: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。