我正在考虑一个JSch库用法示例,可以在这里找到:http :
//www.jcraft.com/jsch/examples/ScpFrom.java.html
我无法从此示例理解几种代码模式。他们来了:
有什么理由比可以使用同一库运行的SFTP更喜欢SCP?
为什么我们scp -f <remote file>
在远程主机上运行而不是简单地运行scp source_file_path destination_file_path
?为什么在远程主机上执行更好?
转移开始时有一条线
while(true){
int c=checkAck(in);
if(c!='C'){
break;
}
...
这封神奇的C
信件是什么意思?为什么C
呢
为什么一直发送该信号?
// send '\0'
buf[0]=0; out.write(buf, 0, 1); out.flush();
如何读取文件大小?
long filesize=0L;
while(true){
if(in.read(buf, 0, 1)<0){
// error
break;
}
if(buf[0]==' ')break;
filesize=filesize*10L+(long)(buf[0]-'0'); //What is this??
}
- 有什么理由比可以使用同一库运行的SFTP更喜欢SCP?
不,SCP协议已过时。您现在应该始终使用SFTP。
尽管SFTP协议的琐碎实现往往比SCP传输慢(由于其数据包性质,要有效地实现SFTP传输并不容易)。
- 为什么我们
scp -f <remote file>
在远程主机上运行而不是简单地运行scp source_file_path destination_file_path
?为什么在远程主机上执行更好?
SCP协议就是这样工作的。OpenSSHscp
二进制文件既可以用作服务器,也可以用作客户端。因此,当您在scp
本地运行时,它将通过SSH连接并scp
在服务器上运行。然后,这两个实例彼此通信。JSch替换的本地实例scp
。但是它仍然需要远程实例来完成传输。
如果您在scp
本地运行,则必须在计算机上安装OpenSSH。在Unix上可能很常见,但在Windows上绝对不常见。同样,没有简单/标准化的方法可以从scp
程序中捕获结果,并将其转换为JSch Java接口。这是JSch(或任何其他SFTP库)自行实现SFTP协议而不使用sftp
程序的相同原因。
- 这个神奇的C字母是什么意思?为什么是C?
SCP协议的每个命令都由单个字符标识。该C
代表“文件传输”,D
代表“目录转移”,T
之前的文件传输指示下一个传输的文件的修改时间,等我不知道为什么它C
,而不是例如F
。
- 为什么一直发送该信号?
NULL(\0
)字符命令是对另一个站点的确认/响应,该站点已完成接收到的命令。
- 如何读取文件大小?
该C
命令具有语法(这是人类可读的字符串):
C permissions size filename
例如:
C 0644 153634 index.php
代码中的循环将字符串"153634"
转换为数字153634。它看起来实现起来有点过于复杂,但是可以正常工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句