
環境 [XP VB6.0]
お世話になります。
RS-232Cのクロスケーブルで2台のPCを接続し、一方のPCにあるファイルをもう一方のPCに送信し、受信したファイルを保存するというプログラムを作成しないといけません。
現状、フォーム上でコモンダイアログによりファイルを選択し、選択したファイルが、フルパスでテキストボックスに表示されます。
送信ボタンをクリックするとファイルの送信処理を開始し、受信側は受け取ったファイルを保存するという流れを作りたいのです。
しばらく調べたのですが、なかなかクリティカルする回答を見つける事が出来なかったので質問させていただきます。
もうこのような転送手段は使わないと思いますが・・・。
MSCommコントロールを使用し、文字の送受信程度であればできたのですが、MSCommではファイル転送はできないのでしょうか?
送信側、受信側のプログラムをご教授いただければと思います。
つたない文章で申し訳ありません。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
>この記述で、バイナリモードで開いたファイルを
>あたかもコピーしたかのような形で、別のファイルとして書き込む事が出来ますが、
>このbytBufAll()の内容を転送し、Putステートメントを受信側で行うと言う考え方で
>間違いないでしょうか?
微妙にちがう気がします。
Putはファイルへの出力ステートメントですから、「受信側でおこなう」ものではありません。
つまり、Putに相当する全バイト送信関数を「送信側PC」で実装し、
加えて、これを受信してファイルに落とす受信関数を「受信側PC」に
実装する必要があります。
提示されているプログラムではbytBufAllの最大数が指定されていないので
プログラム的にもまずいとおもいます。
あえてこれを利用するならLOFでファイルのサイズ分を得て
Redimするのが定石かな。
そのあと、よみだされたbytBufAllを1バイトづつMSCommに送出するのを
繰り返せばよいとおもいます。
受信側にそれなりの速度があって、受信バッファももっているようなら
数十バイトづつおくるのもありかとおもいます。
ただ、受信側ではファイルの終端であることが認識できませんから
前述のように、ファイル終端をなんらかの形で伝えられていること
が前提ですし、通信途絶などの不慮の状態を検出できるように
プログラム構造を考えておくことが必須です。
techa様
たびたびありがとうございます。
ひとまず、送信側のPGを作成し、受信側のPGを作成しているところです。
bytBufAll()の内容を受信し、ファイルに書き込んでも文字化等がおこり、うまく開けない状態ではあります。
もう少し試行錯誤してみて、どうしてもうまく行かない場合はまた質問を上げたいと思います。
お力を貸していただき本当にありがとうございました。
No.2
- 回答日時:
まず、RS232Cでもバイナリファイルの転送は可能です。
ただ、考えなければならないことが増えるので、何かしらの方法が
必要とされるだけです。
RS232Cでの転送がキャラクタ転送となるときは、
表示キャラクタ以外の文字を制御文字として扱えるので、
データの終端などを正確に把握することが可能です。
これに対して、バイナリの場合は&h00~&hffまでのすべての
コードが出現可能であって、データの区切りの認識ができなく
なるからです。
これでは、受信側のPCはいつ伝送終了になったのか、把握するすべ
がありませんね。
そこで伝送のプロトコルを定めることになるのですが、それには
ANo1さんのように、全部テキスト化しておくるほうほうもわかりやすくて
よいとおもいます。ただ、このようにおこなうと
実際のバイト数*(1バイトを表現する文字数)+α
の時間がかかってしまいます。
あるいは、先に全体のバイト長をキャラクタでおくっておいて、その後は
一定バイト数をバイナリでおくる、というのも手ですね。
昔からある手法ではXMODEMやYMODEMなどの方法もあります。
しらべてみるのもいいでしょう。
いまどきなら、一旦BASE64でエンコードして全部テキスト化してしまい、
これをそのまま転送し、受信PCで再度デコードするというのもありかも
しれません。
VBならこちらのほうがサンプルをみつけやすいようにおもいます。
techa様
ご返答ありがとうございます。
さらに質問になりますが、
Dim bytBufAll() as byte
Open FILENAME1 For Binary As #1
Get #1, , bytBufAll() 'ファイル全体を読み込む
Open FILENAME2 For Binary As #2
put #2, , bytBufAll() 'ファイルを書き込む
この記述で、バイナリモードで開いたファイルを
あたかもコピーしたかのような形で、別のファイルとして書き込む事が出来ますが、このbytBufAll()の内容を転送し、Putステートメントを受信側で行うと言う考え方で間違いないでしょうか?
No.1
- 回答日時:
MSCommコントロールには直接ファイルを転送する機能はありません。
その機能はあなたが作ることになります。
(それがファイル転送のプロトコルとなります)
ファイルを転送するには最低限
1.ファイル名を送る
2.ファイルの中身を送る。
の2段階の処理が必要です。
スマートでは無いけど簡単な方法を示します。(概念だけなのでテスト無し)
送信側
(1)ファイル名をテキストで送る。
(2)ファイルをバイナリモードで開く。
(3)1バイト読み込む。
(4)読み込んだデータをCstr関数で数値文字列にして送る。
(5)ファイルがEOFでなければ(3)に戻る。
(6)-1を送ってファイル終了を知らせる。
(7)ファイルを閉じる。
(8)終わり
受信側
(1)ファイル名を受け取る。
(2)受け取ったファイル名(パス部分は削除)でバイナリファイルを開く。
(3)データを1行受信する。
(4)データが-1なら(7)へいく。
(5)受信したデータをバイト変数に入れて、ファイルへ1バイト書込む。
(6) (3)へ戻る。
(7)ファイルを閉じる。
(8)終わり
Hayashi_Trek様
早速のご回答ありがとうございます。
ファイルそのものは遅れないんですね・・・。
例えば、ワードデータとかエクセルデータはたまたビットマップデータ等、中身がテキストとは限らないファイル等のやり取りはできないのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP どうして送信されないのでしょうか? 1 2022/12/09 05:23
- PDF 保存したPDFファイルが開けなくなり、困っています 1 2022/09/15 21:08
- その他(クラウドサービス・オンラインストレージ) Onedriveで実現したい事。2台のPC間で。 2 2023/04/10 20:42
- Outlook(アウトルック) w10からw11にバージョンアップ。アウトルックがクラウドと連携…そのためか、連絡先が消失!! 3 2023/05/09 18:34
- PHP a href リンクタグでだけで 送信が できちゃっています。 1 2022/04/18 04:25
- その他(Microsoft Office) officeのWordで作成した文章をメール添付してしたい 3 2023/08/07 07:12
- Outlook(アウトルック) アイホンで撮った写真を一枚だけPCに移し画像を縮小してWebメールに添付して送信する方法 1 2022/04/22 15:33
- Android(アンドロイド) Aloha Browser でダウンロードしたファイルをPCに転送するには? 1 2022/05/23 18:54
- Word(ワード) PCで作ったwordをスマホで編集しようとすると「このファイルは読み取り専用です。」と表示される。 3 2023/05/30 14:51
- その他(メールソフト・メールサービス) Gメールについて質問 6 2023/06/14 18:02
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
バイナリのセーブデータを作るのに
-
HDDのバイナリイメージの取得方...
-
C言語でBMPファイルの内容を表...
-
JPGのwidhtとheight
-
コンピュータ系にはめっぽう弱...
-
BMP 仕様
-
読み込んだファイル
-
エクセルVBA 2千万行のCSVファ...
-
エディットボックスの改行について
-
この方法でバイナリデータが読...
-
バイナリ形式のXMLファイルを読...
-
RS-232Cで接続したPC間のファイ...
-
FTPでエクセルをPUTするとファ...
-
FMFファイルの構造を知りたいの...
-
ファイルの読み込み・書き込み
-
C言語初心者の質問失礼します。
-
どんなプログラムを書いても指...
-
VBScriptでのファイル結合処理...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
エラー:ストリームの終わりを...
-
EXCEL VBAでテキストファイルの...
-
エクセルVBA 2千万行のCSVファ...
-
EXCEL VBAで、バイナリデータの...
-
VBA バイナリ―から文字列にす...
-
ページ読み込み時に自動的にsub...
-
【python】Excelファイルを読み...
-
EOF
-
テキストデータをSQLServerに取...
-
PHPのfgetcsvの処理容量について
-
なぜデータの整合性を確認する...
-
【MFC】CFileでSeekした位置か...
-
C++ Builderにおける画像データ...
-
入力ファイルをバイナリにする利点
-
バイナリファイルの検索について
-
バイナリーデータの一部データ...
-
htmlのデータをwebページみたい...
-
Javaでのエンディアン変換
おすすめ情報