知识大全 获取ServerSocket信息的方法及FTP原理
Posted 知
篇首语:青春须早为,岂能长少年。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 获取ServerSocket信息的方法及FTP原理相关的知识,希望对你有一定的参考价值。
Java网络编程从入门到精通(28):获取ServerSocket信息的方法及FTP原理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
与ServerSocket对象相关的信息有两个 绑定端口和绑定IP地址 绑定端口可以通过getLocalPort方法获得 绑定IP地址可以通过getInetAddress方法获得
一 getLocalPort方法
getLocalPort方法的返回值可分为以下三种情况
ServerSocket对象未绑定端口 getLocalPort方法的返回值为
ServerSocket对象绑定了一个固定的端口 getLocalPort方法返回这个固定端口
ServerSocket对象的绑定端口为 getLocalPort方法返回一个随机的端口(这类端口被称为匿名端口)
getLocalPort方法的定义如下
public int getLocalPort()
getLocalPort方法主要是为这些匿名端口而准备的 下面的代码演示了ServerSocket对象产生随机端口的过程
package server;import *;public class RandomPort public static void main(String[] args) throws Exception for (int i = ; i <= ; i++) System out print( Random Port + i + ); System out println(new ServerSocket( ) getLocalPort());
运行结果
主动模式
在主动模式中 FTP服务器绑定了两个端口 和 (这两个端口是默认值 可以设成别的端口) 其中 端口负责客户端和服务器之间的命令传送 一开始 由客户端主动连接服务端的 端口 并且向服务器发送相应的FTP命令 另外一个端口 是负责客户端和服务端的数据传送 但要注意 并不是客户端主动连接服务端的 端口 而是在客户端创建一个使用匿名端口的服务端连接(在Java中就是创建一个ServerSocket对象 并且绑定端口是 ) 然后客户端通过 端口将这个匿名端口通知服务端 最后 服务端主动连接客户端的这个匿名端口(所以这种模式叫主动模式 就是服务器主动连接客户端) 图 描述主动模式的工作原理
图 主动模式的工作原理
从图 可以看出 在主动模式中 在传送命令和数据时 建立连接的过程是相反的 也就是说 在传送命令时 由客户端主动连接服务器的 端口 而传送数据时 由服务器主动连接客户端的匿名端口 这种方式是FTP服务器最初的工作模式 但这种模式有很大的局限性 如客户端通过代理上网 而且未做端口映射 在这种情况下 服务端是无法主动和客户端建立连接的 因此 这就产生的另一种模式 被动模式
被动模式
被动模式和主动模式在传送命令的方式上是一样的 它们的区别就在于数据的传输上 被动模式在建立命令传输通道后 服务端建立一个绑定到匿名端口的ServerSocket对象 并通过命令传输通道将这个匿名端口通知客户端 然后由客户端主动连接服务端的这个匿名端口 这对于服务端就是被动的 因此 这种模式叫被动模式 图 描述了被动模式的工作原理
图 被动模式的工作原理现在的大多数FTP客户端软件的默认工作模式都是被动模式 因此 这种模式可以克服防火墙等的限制 并且客户端不需要有固定IP 但这种模式也有它的缺点 这就是在服务端要为客户开大量的端口(大多数FTP服务器开的端口范围是 ~ 但有的服务器的范围达到 ~ ) 这对于服务器来说存在着一定的安全隐患 因此 如果可能的话 最好还是采用主动模式
二 getInetAddress方法
getInetAddress可以得到ServerSocket对象绑定的IP地址 如果ServerSocket对象未绑定IP地址 返回 getInetAddress方法的定义如下
public InetAddress getInetAddress()
下面的代码演示了getInetAddress的使用方法
ServerSocket serverSocket = new ServerSocket();serverSocket bind(new InetSocketAddress( )); System out println(serverSocket getInetAddress() getHostAddress());
运行结果
三 getLocalSocketAddress方法
这个方法其实是将getLocalPort和getInetAddress方法的功能集成到了一起 也就是说 使用getLocalSocketAddress方法可以同时得到绑定端口和绑定IP地址 这个方法返回了一个SocketAddress对象 SocketAddress类是一个抽象类 要想分别得到端口和IP地址 必须将SocketAddress对象转换成InetSocketAddress对象(InetSocketAddress类是从SocketAddress类继承的) getLocalSocketAddress方法的定义如下
public SocketAddress getLocalSocketAddress()
下面的代码演示了getLocalSocketAddress的使用方法
ServerSocket serverSocket = new ServerSocket();serverSocket bind(new InetSocketAddress( ));System out println(serverSocket getLocalSocketAddress());InetSocketAddress nsa = (InetSocketAddress)serverSocket getLocalSocketAddress();System out println( nsa getAddress() getHostAddress());System out println( nsa getPort());
运行结果
cha138/Article/program/Java/hx/201311/26565相关参考
Java获取网络主机信息 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! InetAddress类
纳税人可以通过哪些渠道获取涉税信息 一是通过网站、电话等现代信息技术。目前,全国税务系统建立了以国家税务总局网站为龙头、省级税务机关网站为主体的税务网站群,均设置信息公开专栏。同时,通过12366纳
PHP网络编程:获取用户的注册信息[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
PHP网络编程:获取用户的注册信息[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
PHP网络编程:获取用户的注册信息[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
使用Delphi获取系列信息 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Delphi以其优良的可
获取SQLSERVER用户表信息游标 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! /*获取用户
VB.net2008实例:读写注册表与获取系统信息 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 一个全面获取图象信息的函数getImageInfo()
一个全面获取图象信息的函数getImageInfo() 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
Java获取Http响应Header信息 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文中演