利用規約の変更について

環境 [XP VB6.0]

お世話になります。
RS-232Cのクロスケーブルで2台のPCを接続し、一方のPCにあるファイルをもう一方のPCに送信し、受信したファイルを保存するというプログラムを作成しないといけません。

現状、フォーム上でコモンダイアログによりファイルを選択し、選択したファイルが、フルパスでテキストボックスに表示されます。

送信ボタンをクリックするとファイルの送信処理を開始し、受信側は受け取ったファイルを保存するという流れを作りたいのです。
しばらく調べたのですが、なかなかクリティカルする回答を見つける事が出来なかったので質問させていただきます。
もうこのような転送手段は使わないと思いますが・・・。

MSCommコントロールを使用し、文字の送受信程度であればできたのですが、MSCommではファイル転送はできないのでしょうか?

送信側、受信側のプログラムをご教授いただければと思います。
つたない文章で申し訳ありません。
よろしくお願いします。

A 回答 (3件)

>この記述で、バイナリモードで開いたファイルを


>あたかもコピーしたかのような形で、別のファイルとして書き込む事が出来ますが、
>このbytBufAll()の内容を転送し、Putステートメントを受信側で行うと言う考え方で
>間違いないでしょうか?

微妙にちがう気がします。
Putはファイルへの出力ステートメントですから、「受信側でおこなう」ものではありません。
つまり、Putに相当する全バイト送信関数を「送信側PC」で実装し、
加えて、これを受信してファイルに落とす受信関数を「受信側PC」に
実装する必要があります。
提示されているプログラムではbytBufAllの最大数が指定されていないので
プログラム的にもまずいとおもいます。
あえてこれを利用するならLOFでファイルのサイズ分を得て
Redimするのが定石かな。
そのあと、よみだされたbytBufAllを1バイトづつMSCommに送出するのを
繰り返せばよいとおもいます。
受信側にそれなりの速度があって、受信バッファももっているようなら
数十バイトづつおくるのもありかとおもいます。
ただ、受信側ではファイルの終端であることが認識できませんから
前述のように、ファイル終端をなんらかの形で伝えられていること
が前提ですし、通信途絶などの不慮の状態を検出できるように
プログラム構造を考えておくことが必須です。
    • good
    • 0
この回答へのお礼

techa様
たびたびありがとうございます。
ひとまず、送信側のPGを作成し、受信側のPGを作成しているところです。
bytBufAll()の内容を受信し、ファイルに書き込んでも文字化等がおこり、うまく開けない状態ではあります。
もう少し試行錯誤してみて、どうしてもうまく行かない場合はまた質問を上げたいと思います。
お力を貸していただき本当にありがとうございました。

お礼日時:2008/02/07 20:14

まず、RS232Cでもバイナリファイルの転送は可能です。


ただ、考えなければならないことが増えるので、何かしらの方法が
必要とされるだけです。

RS232Cでの転送がキャラクタ転送となるときは、
表示キャラクタ以外の文字を制御文字として扱えるので、
データの終端などを正確に把握することが可能です。
これに対して、バイナリの場合は&h00~&hffまでのすべての
コードが出現可能であって、データの区切りの認識ができなく
なるからです。
これでは、受信側のPCはいつ伝送終了になったのか、把握するすべ
がありませんね。
そこで伝送のプロトコルを定めることになるのですが、それには
ANo1さんのように、全部テキスト化しておくるほうほうもわかりやすくて
よいとおもいます。ただ、このようにおこなうと
実際のバイト数*(1バイトを表現する文字数)+α
の時間がかかってしまいます。
あるいは、先に全体のバイト長をキャラクタでおくっておいて、その後は
一定バイト数をバイナリでおくる、というのも手ですね。
昔からある手法ではXMODEMやYMODEMなどの方法もあります。
しらべてみるのもいいでしょう。
いまどきなら、一旦BASE64でエンコードして全部テキスト化してしまい、
これをそのまま転送し、受信PCで再度デコードするというのもありかも
しれません。
VBならこちらのほうがサンプルをみつけやすいようにおもいます。
    • good
    • 0
この回答へのお礼

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ステートメントを受信側で行うと言う考え方で間違いないでしょうか?

お礼日時:2008/02/06 20:14

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)終わり
    • good
    • 0
この回答へのお礼

Hayashi_Trek様
早速のご回答ありがとうございます。
ファイルそのものは遅れないんですね・・・。
例えば、ワードデータとかエクセルデータはたまたビットマップデータ等、中身がテキストとは限らないファイル等のやり取りはできないのでしょうか?

お礼日時:2008/02/05 21:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QRS-232Cでバイナリデータを受信する方法

2台のPCを使用しバイナリファイルをRS232Cを使用し1台目のPCは送信専用、2台目のPCは受信専用で、送信側のPCから出したデータを受信側PCでデータの内容を判断し集計するプログラムを作ろうとしています。

送信側のPCでは、"AAB9AAC2AACC01D8AAE2・・・”といった内容のバイナリファイルの内容を1バイトずつ読み込み、それをMsCommを用いてバイナリモードで送信させて、EOFになるまで永遠とそれを繰り返します。

問題は受信側で、たとえば上記のデータの中の"AAB9"ならばカウントを1つ上げる、"AACC01D8"ならばカウントを1つ下げ、それを表示するといったような処理をリアルタイムで行いたいのですが、どうしてもデータの取りこぼしが発生します。

また、データの意味合いとしては、必ず"AA"という1バイトのデータから始まり、それに1バイトから5バイトまでのデータが可変長で付いてきて次の"AA"までが1つの意味となります。

通信パラメータは9600、8ビット、ストップビット1、パリティなしで、その他の制御線は一切使用しないという条件です(要するにRxD、GND線のみの最低限の条件)

受信側のバッファは1024バイトで、MSComm1.RThreshold = 1でOnCommを発生させています。また、送信側のファイルの大きさは1kバイトほどです

正直なところ、このようなことが可能なのかどうかもわからない状況なのですが、現状ではデータを数バイト取りこぼしているだけのようなのでできないことはないのではないか?と考えています。

どなたか、参考文献、ホームページ、プログラム、考え方等を何でもかまいませんん!ぜひ、ご教授願います!!また、現在はVBにて開発中ですが、最悪、言語は問いません。よろしくお願いいたします。

2台のPCを使用しバイナリファイルをRS232Cを使用し1台目のPCは送信専用、2台目のPCは受信専用で、送信側のPCから出したデータを受信側PCでデータの内容を判断し集計するプログラムを作ろうとしています。

送信側のPCでは、"AAB9AAC2AACC01D8AAE2・・・”といった内容のバイナリファイルの内容を1バイトずつ読み込み、それをMsCommを用いてバイナリモードで送信させて、EOFになるまで永遠とそれを繰り返します。

問題は受信側で、たとえば上記のデータの中の"AAB9"ならばカウントを1つ上げる、"AACC01D8"なら...続きを読む

Aベストアンサー

たしか.1秒に1回100msほど.タイマー関連の処理に取られて.結構速度を落とさないと.取りこぼしが発生するようです。

私の関係した対応では.
バッファを巨大にする
転送速度を4800に落とす
受信ソフトの実行速度をあげるため.受信中は他の仕事をさせない
の3店でした。

Qシリアル(RS232C)通信でファイル送信をするには

現在、VB6.0を使用してシリアル通信の処理をしておりますが、
任意のファイルを相手側に送信をしたいと思いますがどの様に
処理をしたらいいいのか判らないので教えて下さい。

Aベストアンサー

>どの様に処理をしたらいいいのか判らないので
1.送信側でファイルを選択、
 →受信側にファイル名を通知(サイズもいる?)
2.送信側でファイルを読み込み、受信側に送信。
 →受信側でファイルに書き出し
  必要であれば、「n番目の送信」「送信サイズ」「チェックサム」等も付加する。
3.ファイルの終端まで2.を繰り返し。

基本的なやり方はどの通信方法でも一緒。

Qシリアル通信におけるバイトデータの送受信(VB.NET)

Visual Basic .NETで、WriteLine("テキスト")やReadLineを使えば、テキストデータは送受信できますが、バイトデータはどのようにすれば送受信できるのでしょうか?具体的なコードを知っている方がいたら教えて頂きたいです。

Aベストアンサー

こんにちは
http://msdn2.microsoft.com/ja-jp/library/ms143551(VS.80).aspx

そこまでご存知でしたらあともうひと調べでしたね。

QVisual Basic 2010を使ってRS-232Cとの通信をした

Visual Basic 2010を使ってRS-232Cとの通信をしたい。

現在、機器とPCとの通信のやりとりをするため、機器のマニュアルを見ながら悪戦苦闘しています。

通信のやり取りについては、マニュアルにVB6を使った例が書いてあります。
しかしVB6が手に入らなかったので、Visual Basic2010を現在使っています。

マニュアル(VB6向け)には
・On the Project Menu, click Components to bring up a list of additional controls available in VB6.
・Scroll through the controls and select Microsoft Comm Control 6.0. Select OK. In the toolbar at the left of the screen, the Comm Control will have appeared as a telephone icon.
・Select the Comm control and add it to the form
と書いてあります。

よく分らなかったのですが、上のメニューの「Project」⇒「Add reference」を選び、「COM」の中にあった「Microsoft Comm Control」を選びました。

が、左のツールバーには電話のアイコンは出てきませんでした。

2010の場合、VB6と違って別のやり方をしないといけないのでしょうか?


ご存知の方がいましたら、教えて頂きたいです。よろしくお願いします。

Visual Basic 2010を使ってRS-232Cとの通信をしたい。

現在、機器とPCとの通信のやりとりをするため、機器のマニュアルを見ながら悪戦苦闘しています。

通信のやり取りについては、マニュアルにVB6を使った例が書いてあります。
しかしVB6が手に入らなかったので、Visual Basic2010を現在使っています。

マニュアル(VB6向け)には
・On the Project Menu, click Components to bring up a list of additional controls available in VB6.
・Scroll through the controls and select Microsoft Comm Control 6.0...続きを読む

Aベストアンサー

SerialPortコンポーネントでシリアル通信が可能です

VB6にはMSCommというコンポーネントがあったようですが、.NET2003以降にはありません。
2005からSerialPortコンポーネントが標準でついているはずなのでそちらを使用してはいかがでしょうか?

http://msdn.microsoft.com/ja-jp/library/cc825644.aspx


人気Q&Aランキング

おすすめ情報