【发布时间】:2015-05-29 15:11:57
【问题描述】:
我一直在阅读Jsch ScpTo Example,但无法理解他们在做什么。更具体地说,我无法理解 checkAck 方法的工作原理。
checkAck方法:
static int checkAck(InputStream in) throws IOException{
int b=in.read();
// b may be 0 for success,
// 1 for error,
// 2 for fatal error,
// -1
if(b==0) return b;
if(b==-1) return b;
if(b==1 || b==2){
StringBuffer sb=new StringBuffer();
int c;
do {
c=in.read();
sb.append((char)c);
}
while(c!='\n');
if(b==1){ // error
System.out.print(sb.toString());
}
if(b==2){ // fatal error
System.out.print(sb.toString());
}
}
return b;
}
这似乎是在引用 TCP 协议中的 ACK 标志。但是,在阅读 TCP 协议时,似乎在 TCP 标头中发送了相当多的内容。但是,当调用该方法时,它不必对所有这些进行排序并提取标志。它只是假设 ACK 标志将是流中的下一个整数。
有人可以向我解释以下哪一项适用:
- 为什么这个假设是有效的,
- 提取标志的正确方法,
- 在调用方法之前,他们如何确保输入流始终位于正确的标志上,或者
- 如果这与 TCP ACK 标志无关,它与什么有关?
【问题讨论】: