telnet,ftp命令
apache的commons-net.jar包中对telnet,ftp,pop3,smtp等协议进行了封装。使用telnet,ftp,pop3,smtp等协议,有一套编程接口socket来应对这些协议。同时可以查看commons-net.jar的源码,发现每个协议的实现类,都继承了SocketClient,依靠socket来处理。所以telnet,ftp,pop3,smtp等协议的操作都是基于socket的,just as http is based on soket。可以这么理解,协议的连接都是使用的socket去连接,只是操作有不同的限定而已。
闲扯一下:回到socket的问题上,socket属于网络协议层的哪一层?socket 应该算不上是个协议,socket只是网络编程的一个api套件,是一个接口,实际对应应该是应用层与传输层间的一个抽象层。网络分层如下图:
回到主题上:telnet,和ftp命令
这两个命令分别可以远程对系统进行telnet登陆和ftp登陆,两种登陆使用的不同的协议,分别属于两种不同的网络服务。
telnet:
telnet则属于远程登陆服务,也就是说可以登陆到远程系统上,并获得一个解释器权限,拥有解释器就意味着拥有了一定的权限,这种权限可能是基本的文件操作、也可能是可以控制系统的管理员权限。
实际中的例子:如web系统要向应用系统传输一串指令,应用系统接到这串指令后可以进行解析,然后做应该做的业务处理。
TelnetClient tc = new org.apache.commons.net.telnet.TelnetClient(); tc.connect(host, port); PrintStream out = new PrintStream(tc.getOutputStream()); out.println(command); //; out.flush(); // 应用系统监听相应的port就可以了。
ftp:
ftp是远程文件共享服务,也就是说学习者可以将自己的资料上传、下载,但是它并没有过多的权利,无法在远程电脑上执行上传的文件。简单实践例子。
FTPClient ftp = new FTPClient(); ftp.connect(serverIP, serverPort); ftp.login(username, pwd); cdOK = ftp.changeWorkingDirectory(remotePath);// 针对ftp协议的特殊借口,遵守一定的规范,而telnet规范是不会有这种操作的。 ftp.putFile("D:/20100902.txt", "20100902.txt");// 将本地文件传到serverIP的remotePath目录下,并且命名:20100902.txt ftp.disconnect();
————————————————————————————————————————————————————————————————————————
cmd下
-----------------------------
telnet xxx.xxx.xxx.xxx 28010
-----------------------------
ftp
open xxxx.xxx.xxx.xxx 21
quit
------------------------------