問題タブ [zmodem]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - ZModem over USB 経由でファイルを転送することは可能ですか?
特に、その目的で利用できる .NET ライブラリはありますか? Google で 2 時間検索しても何も見つからなかったので楽観はできませんが...
大きな疑問: USB 経由で ZModem を使用することさえ可能ですか?
ティア。
protocols - ZMODEM プロトコルについて
プログラムに基本的なファイル送信ルーチンとファイル受信ルーチンを含める必要があり、ZMODEM プロトコルを使用する必要があります。問題は、仕様を理解するのに苦労していることです。
参考までに、こちらが仕様です。
仕様ではさまざまな定数が定義されていないため、Google のヘッダー ファイルを次に示します。
そのドキュメントには未定義の重要なことがたくさんあるように私には思えます:
- 常に ZDLE エンコーディングについて言及していますが、それは何ですか? 正確にいつ使用し、いつ使用しないのですか?
- ZFILE データ フレームの後、ファイルのメタデータ (ファイル名、変更日、サイズなど) が転送されます。これに ZCRCW ブロックが続き、次に仕様に従って型が定義されていないブロックが続きます。ZCRCW ブロックには 16 ビットの CRC が含まれていると言われていますが、仕様では CRC が計算されるデータについて定義されていません。
使用する CRC 多項式を定義しません。CRC32 ポリが標準の CRC32 であることを偶然知りましたが、CRC16 ポリではそのような運がありませんでした。気にしないで、試行錯誤して見つけました。CRC16 ポリは 0x1021 です。
参照コードを探してみましたが、90 年代初頭の判読不能で文書化されていない C ファイルしか見つかりませんでした。MSDN からこの一連のドキュメントも見つけましたが、非常に曖昧で、実行したテストと矛盾しています: http://msdn.microsoft.com/en-us/library/ms817878.aspx (必要な場合があります) Google のキャッシュを介してそれを表示するには)
私の困難を説明するために、ここに簡単な例を示します。「Hello world!」を含むプレーンテキスト ファイルをサーバー上に作成しました。これは helloworld.txt という名前です。
次のコマンドを使用して、サーバーからの転送を開始します。
これにより、サーバーは次の ZRQINIT フレームを送信するように求められます。
これに関する3つの問題:
- パディング バイト (0x2A) は任意ですか? なぜここには 2 つあるのに、1 つしかない場合もあれば、まったくない場合もあるのですか?
- 仕様では最後に [CR] [LF] [XON] について言及されていませんが、MSDN の記事では言及されています。なぜそこにあるのですか?
- [LF] にビット 0x80 が設定されているのはなぜですか?
この後、クライアントは ZRINIT フレームを送信する必要があります。MSDNの記事からこれを入手しました:
[LF] 0x80 フラグの問題に加えて、さらに 2 つの問題があります。
- 今回はなぜ【XON】が入っていないのですか?
CRC はバイナリ データまたは ASCII 16 進データで計算されますか? バイナリ データの場合は 0x197C を取得し、ASCII 16 進データの場合は 0xF775 を取得します。これらはどちらも、実際にフレーム (0xBE50) にあるものではありません。(解決済み。使用しているモードに依存します。BIN または BIN32 モードの場合は、バイナリ データの CRC です。ASCII 16 進モードの場合は、ASCII 16 進文字で表されるものの CRC です。 .)
サーバーは ZFILE フレームで応答します。
わかった。これは理にかなっています。[04 00 00 00 00] の CRC32 を計算すると、確かに 0x33A251DD が得られます。しかし、今では最後に [CR] [LF] [XON] がありません。どうしてこれなの?
このフレームの直後に、サーバーはファイルのメタデータも送信します。
これにはヘッダーさえありません。データに直接ジャンプするだけです。OK、私はそれで暮らすことができます。でも:
- 最初の謎の ZCRCW フレーム [18 6B] があります。このフレームの長さは?CRC データはどこにあり、CRC16 または CRC32 ですか? 仕様のどこにも定義されていません。
- MSDN の記事では、[18 6B] の後に [00] が続くように指定されていますが、そうではありません。
- 次に、[18 50 D3 0F F1 11] という未定義のタイプのフレームがあります。これは別のフレームですか、それとも ZCRCW の一部ですか?
クライアントは、再び MSDN の記事から引用した ZRPOS フレームで応答する必要があります。
ZRINIT フレームと同じ問題: CRC が間違っている、[LF] にビット 0x80 が設定されている、[XON] がない。
サーバーは ZDATA フレームで応答します。
ZFILE と同じ問題: CRC は問題ありませんが、[CR] [LF] [XON] はどこにありますか?
この後、サーバーはファイルのペイロードを送信します。これは短い例なので、1 つのブロックに収まります (最大サイズは 1024 です)。
記事が言及しているように見えることから、ペイロードは [ZDLE] でエスケープされます。では、たまたま [ZDLE] の値と一致するペイロード バイトを送信するにはどうすればよいでしょうか。このような他の値はありますか?
サーバーは次のフレームで終了します。
私は最初のもので完全に迷っています。2 番目は、ZRINIT および ZDATA フレームと同じくらい理にかなっています。
c++ - C /C++を使用したZmodem受信ファイル
シリアルポートを介してzmodemを使用してリモートサーバーからテキストファイルを取得するために、WindowsプラットフォームでC++プログラムを作成するように割り当てられています。この男とほとんど同じですが、窓にあります。
ここが行き詰まっています。シリアルケーブルを使用してサーバーと通信できますが、サーバーがファイルを送信するときにzmodemプロトコルを使用するため、サーバーからrz \r**。B00000000\rが送信されることがわかります。
そのため、zmodemプロトコルの仕様を読みましたが、ファイルの受信を開始する方法がわかりません。仕様に記載されているヘッダーファイルに従ってZRINITを送信します。ただし、ファイル転送は開始されません。
私の質問はこれです。ファイルを送信する要求が私に与えられ、パケットの受信を開始することを期待しているときに、単純にバイトを送信できますか?おそらく間違ったコードを送信していますか?その場合、コーディング方法の例があります。自分でプロトコルを作成して、これを自動的に実行するライブラリを見つけようとしないでください。もしそうなら、それはウィンドウズのために存在しますか?または、コマンドラインから入力を受け取る通信プログラムを探す必要がありますか?
どうすればいいのか、アドバイスが必要です。
sexyzについて読みましたが、ダウンロードページが見つかりません。
どんな入力でも大歓迎です。
アップデート
私はプロトコルについてもう少し理解しました。仕様では、セクション8と12で、送信者と受信者の間のトランザクションがどのように機能するかについて言及しています。それから、ZRQINIT、ZRINIT、ZFILEなどのいくつかのヘッダーのコードを解読することができました...
私はまだ多く、すなわちZRP0S、ZRFINが欠けています。誰かがこれらの文字列が定義されている場所へのリンクを見つけることができれば、それは私を大いに助けてくれるでしょう。
zmodem - sz (ZMODEM プロトコル ファイル転送) を非対話的に使用する
sz コマンド (ZMODEM を使用してファイルを送信する) を非対話的に使用する方法。UNIX サーバーから winodws にファイルを固定ソース ディレクトリから固定宛先ディレクトリに転送するスクリプトを実行します。szのマニュアルページには
With ZMODEM AutoDownload enabled, Professional-YAM and ZCOMM will automatically recieve
the files after performing a security check.
しかし、私はそれを使用する方法がわかりません。
embedded-linux - zmodem アップロードが奇妙なエラーで終了する
現在、zmodem を介して、busybox を備えた Linux が組み込まれた小さなシステムにいくつかのファイルをアップロードしようとしています。ほとんどのファイルは 9600 ボー接続で長い時間がかかりますが、常に失敗するファイルが 1 つあります ( cramfs_cmc-pu2_v2.45.img )。約 4MB で、最大のものでもあります。アップロードには、zmodem をサポートする Putty フォークであるLe Puttyを使用します。残念ながら、そのマシンの ftp サーバーが正しく動作しないため、ファイルをアップロードする他の方法はありません。
問題は、アップロードが常にこの奇妙なもので終わることです (フィードバックがまったくない状態が数時間続いた後):
フラッシュメモリが不足していると思いましたが、 df はちょうど私に与えます
ファイルシステムが jffs2 であるため、その場合の空き容量の計算はとにかく困難です。
おそらく、その古代のプロトコルでこの問題を解決する方法を考えている人がいるでしょう. 前もって感謝します。
編集:その間、ファイルを多くの小さなファイルに分割し、それらをアップロードしようとしました. 2 つのファイルの後で常に失敗します。これは、十分な空き容量がないという疑いを裏付けています。
java - java telnetサーバー経由でlrzszを使用してzmodemでファイルを送信しようとしています
lrzsz を使用して、zmodem でファイルを送信しようとしています。Java で stdio を読み取り、それを接続されたクライアントのソケットに転送します。
ただし、zmodem のダウンロードは破損しています。そしてそれはエラーになります。