JSch库中SCP协议实现的说明

迈阿密滩

我正在考虑一个JSch库用法示例,可以在这里找到:http :
//www.jcraft.com/jsch/examples/ScpFrom.java.html

我无法从此示例理解几种代码模式。他们来了:

  1. 有什么理由比可以使用同一库运行的SFTP更喜欢SCP?

  2. 为什么我们scp -f <remote file>在远程主机上运行而不是简单地运行scp source_file_path destination_file_path为什么在远程主机上执行更好?

  3. 转移开始时有一条线

    while(true){
    int c=checkAck(in);
    if(c!='C'){
        break;
    }
    ...
    

    这封神奇的C信件是什么意思为什么C

  4. 为什么一直发送该信号?

    // send '\0'
    buf[0]=0; out.write(buf, 0, 1); out.flush();
    
  5. 如何读取文件大小?

    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??
    }
    
马丁·普里克里(Martin Prikryl)
  1. 有什么理由比可以使用同一库运行的SFTP更喜欢SCP?

不,SCP协议已过时。您现在应该始终使用SFTP。

尽管SFTP协议的琐碎实现往往比SCP传输慢(由于其数据包性质,要有效地实现SFTP传输并不容易)。

  1. 为什么我们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程序的相同原因

  1. 这个神奇的C字母是什么意思?为什么是C?

SCP协议的每个命令都由单个字符标识。C代表“文件传输”,D代表“目录转移”,T之前的文件传输指示下一个传输的文件的修改时间,等我不知道为什么它C,而不是例如F

  1. 为什么一直发送该信号?

NULL(\0)字符命令是对另一个站点的确认/响应,该站点已完成接收到的命令。

  1. 如何读取文件大小?

C命令具有语法(这是人类可读的字符串):

C permissions size filename

例如:

C 0644 153634 index.php

代码中的循环将字符串"153634"转换为数字153634。它看起来实现起来有点过于复杂,但是可以正常工作。


另请参阅SCP(安全复制协议)文件传输如何工作?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Midje中的模拟协议实现

来自分类Dev

协议中的方法未实现

来自分类Dev

错误-在Elixir中实现协议

来自分类Dev

如何在集成测试中测试JSch scp命令?

来自分类Dev

未在iOS中实现的协议中的方法

来自分类Dev

未在iOS中实现的协议中的方法

来自分类Dev

在Swift中实现Objective C协议

来自分类Dev

多个类别中的相同协议实现

来自分类Dev

懒/内联在Swift中实现协议

来自分类Dev

Xcode中的自动实现Swift协议方法

来自分类Dev

在基类中实现Swift协议方法

来自分类Dev

在Swift中实现闭包协议

来自分类Dev

在Elixir中的协议实现之间共享功能

来自分类Dev

快速实现泛型类中的协议

来自分类Dev

多个类别中的相同协议实现

来自分类Dev

INET中的MANET路由协议实现

来自分类Dev

在 Swift 中实现 Objective-C 协议

来自分类Dev

继承树中的调用协议默认实现

来自分类Dev

NRPE协议说明

来自分类Dev

cdvfile://协议的说明

来自分类Dev

Swift 协议扩展默认实现与类中的实际实现

来自分类Dev

先进的Swift2-V类中的实现协议与Struct中的实现协议

来自分类Dev

AC库中的线程安全说明

来自分类Dev

在Swift中实现协议中定义的下标时出错

来自分类Dev

JAVA中基于Red-Black树的TreeMap实现的说明

来自分类Dev

Java中类实现文档说明的正确位置

来自分类Dev

虚函数实现中缺少类型说明符

来自分类Dev

检查是否在Swift中实现了可选的协议方法?

来自分类Dev

在Objective-C中实现协议特定的方法