gpt4 book ai didi

java - 尝试使用 lrzsz 通过 java telnet 服务器使用 zmodem 发送文件

转载 作者:行者123 更新时间:2023-12-01 11:44:04 27 4
gpt4 key购买 nike

我正在尝试使用 lrzsz 通过 zmodem 发送文件,方法是读取 java 中的 stdio 并将其转发到已连接客户端的套接字。

private void sendFiles(ArrayList<String> filenames) {
Process p;
ProcessBuilder pb;

filenames.add(0, "/opt/local/bin/sz");

try {

pb = new ProcessBuilder(filenames);

p = pb.start();

InputStreamReader lrzszin = new InputStreamReader(p.getInputStream());
OutputStreamWriter lrzszout = new OutputStreamWriter(p.getOutputStream());

InputStreamReader telnetin = new InputStreamReader(socket.getInputStream());
OutputStreamWriter telnetout = new OutputStreamWriter(socket.getOutputStream());


while (p.isAlive()) {
if (lrzszin.ready()) {
telnetout.write(lrzszin.read());
telnetout.flush();
}
if (telnetin.ready()) {
lrzszout.write(telnetin.read());
lrzszout.flush();
}
}


} catch (IOException ex) {

}
}

但是 zmodem 下载已损坏。它出错了。

最佳答案

您将问题标记为“telnet”,但没有明确表示您正在使用 telnet 进行远程连接。

Telnet 不是 8 位干净的。它使用“转义”字符在客户端和服务器之间交换配置信息。您的传输程序可能需要原始连接。

您可以尝试实现基本的 Telnet支持您的应用程序。出于您的目的,这可能意味着仅转义和取消转义用于前缀 Telnet 命令的 IAC (0xFF) 字符。 Telnet 接口(interface)会将原始流中的这些字节转换为网络上的双 IAC 字符,就像字符串中的“\\”以获得单个反斜杠一样。

通过网络接口(interface)使用 zmodem 是没有意义的——它是为没有内置错误检测/纠正的串行线路而设计的。 scprsync (使用 ssh )是你最好的选择,尽管我有时使用 socket程序(或 netcat )来创建原始监听端口并直接连接到该端口以传输文件。

机器1:socket -q -l 12345 <archive.zip

机器2:socket -q machine1 12345 >archive.zip

(命令是凭内存输入的,并不完全准确)

关于java - 尝试使用 lrzsz 通过 java telnet 服务器使用 zmodem 发送文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29303025/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com