在构造ServerSocket时,如果把端口号设置为0,那么将由操作系统为服务器分配一个端口(匿名端口),程序只要调用getLocalPort()方法就可以获得这个端口号。
多数服务器会监听固定端口,这样便于客户访问服务器。匿名端口一般适用于服务器与客户之间的临时通信,通信结束,就断开连接,并且ServerSocket占用的临时端口也被释放。
FTP协议就是用这种匿名端口。FTP协议用于本地文件系统与远程文件系统之间的传送文件。FTP使用两个并行的TCP连接:一个是控制连接,一个是数据连接。控制链接用于在客户与服务器之间发送控制信息,如用户名和口令、改变远程目录的命令或上传和下载文件的命令。数据连接用于传送文件。TCP服务器在21端口上监听控制连接,如果有客户要求上传或下载文件,就另外建立一条连接,通过它来传送文件。数据连接的建立有两种方式。
(1)TCP服务在21端口监听数据连接,TCP客户主动请求建立与该端口的连接。
(1)首先由TCP客户端创建一个监听匿名端口的ServerSocket,再把这个ServerSocket监听的端口号发送给TCP服务器,然后由TCP服务器主动请求建立与客户端的连接。