アプリ版:「スタンプのみでお礼する」機能のリリースについて

2台のPC間でバイナリデータの送受信を行いたいのですが、具体的な解決方法がわかりません。

イメージとしては、USB経由で音声データを送受信して音を鳴らすという感じです。

Windowsマシン2台、1つのデータは1~2KB程度ですが、10mS に130データ程になります。
20MB/S程度の通信速度になりますので、USB2.0 でも十分かと思うのですが、
1)PC同士をUSBで接続できない
2)接続できたとして、アプリからのアクセス方法がわからない
といった問題があります。

送受信したいアプリプログラムはC#で、送受信すべきデータがあれば、送受信するといった簡単なものです。必要なら、Cで書き直しても構いません。
遅延はあまり出したくないので、1ms毎に13データ程をまとめて処理が理想ですが、100ms毎に1300データをまとめてでも何とか可能です。

接続方法やドライバ、アプリからのアクセス方法、ご教示お願いします。PCには、UB以外にはLANの端子もあり、アプリ接続のときはネットにつなげる必要がありませんので、LAN端子経由での送受信でも構いません。
かなり特殊な希望なので、使えそうな有償のソフトや装置での解決策も歓迎です。よろしくお願いします。

A 回答 (6件)

ソケットって知ってますか?



下記で参考コードありで説明していますので、ご自分でくんでみてください。

参考URL:http://www.geocities.jp/sugachan1973/doc/funto45 …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ソケット、聞いたことあります。usami33さんの言葉で言えば、私の質問は、
 USBあるいはLANの端子を使って
 ソケットが使える状態に持ってゆく具体的方法
ご教示お願いします、になりますね。
更なる回答、よろしくお願いします。

お礼日時:2012/09/04 05:22

>>送受信したいアプリプログラムはC#で、送受信すべきデータがあれば、送受信するといった簡単なものです。

必要なら、Cで書き直しても構いません。

昔、C言語で、TCP/IPを使ってお互いにデータ通信をするプログラムを作成したことがありますが、完成までに、かなり時間がかかった覚えがあります。
基本的には、送受信バッファを用意しておき、そこにデータがあれば、ソケット通信でデータの送信、受信を実行する処理をスレッドで実行するものでした。
速度要求も厳しいので、まともに動作するのか?って最後までわからない状況でしたね。

なお、Linux環境ですといいのですが、Windows環境では、ソケット通信のAPIに制限があり、いろいろと資料を調べることになりました。
特注ハードだったので、ハードバグ、ドライバのバグもあったりしました。

書店で売られているTCP/IP関係のやや高価な本には、参考となるソースが掲載されていたと思います。

あるいは、ネットを丹念に探せば、どこかに参考になるソースがあるかもしれませんね。
頑張ってください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
>あるいは、ネットを丹念に探せば、どこかに参考になるソースがあるかもしれませんね。
探しているのですが見つからず、質問しています。
何かご存知なら、よろしくお願いします。

お礼日時:2012/09/04 05:25

プログラムの話には入りませんが, そもそも「PC 同士を USB ケーブルで直結」することはできません.



USB では (PC に組み込まれた) ルートハブがすべてのデバイスを制御します. なので, PC同士を USB で直結すると互いに相手を制御しようとしてしまいまともに通信することができなくなってしまいます. 「2台の PC を直接つなぐ USBケーブルがある」と思うかもしれませんが, これは実際には「途中にあるデバイスを 2台の PC につないでいる」だけであって, 本当に直結しているわけではありません.

逆に言えば「そ~いうデバイスを作ればいい」ということにはなりますが.... まあ, 面倒っぽいので素直に LAN に逃げた方がよいかと.
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
>そもそも「PC 同士を USB ケーブルで直結」することはできません.
存じております。ですから、

「使えそうな有償のソフトや装置での解決策も歓迎です」

と質問しています。
よろしくお願いします。

お礼日時:2012/09/04 05:28

USBで直結ができず、イーサネットで結合させると思いますが。


パソコンの上には「USBホストコントロ-ラ」が利用されていますが、
PCを直結した場合、両者ともホストとして制御していると思われます。

Linuxドライバだと、ホストコントローラを「ターゲットモード」という、
子機側の応答をさせて活用できるかも、と過去質問にはあります。
http://oshiete.goo.ne.jp/qa/5141138.html

WinVista/7で「転送ツール」ユーザー設定などの移行機能については、
USBホスト同士を対向接続する回路付きケーブルを用いるとされていて、
http://windows.microsoft.com/ja-JP/windows7/tran …
http://ascii.jp/elem/000/000/126/126635/
(現行品だとシステムトークスのSUGOICABLEなど。アプリやオートランが
仕込まれているので、別個にツールを使うというケースは聞かない)
OS自体が直結利用をカバーしていないと思われます。

その為、転送ケーブルの確保よりもLANのピア接続なりハブ接続で結合し、
OS実装済みの機能で確実に通信させる事にしてが、作りやすいはずです。

追伸、スマートフォンで現存らしいUSB OnTheGo(ターゲット・ホスト兼用)
のドライバメーカー解説。ただしスマートフォン時代より前に書かれたまま
http://www.uquest.co.jp/embedded/3minutes/3otg.h …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>その為、転送ケーブルの確保よりもLANのピア接続なりハブ接続で結合し、
>OS実装済みの機能で確実に通信させる事にしてが、作りやすいはずです。
どなたかどこかで作っていないのでしょうかね。
質問にも書きましたが、
接続方法やドライバ、アプリからのアクセス方法の具体例、
有償でも入手したいです。

参考にさせていただきます。

お礼日時:2012/09/04 05:40

再び#1です


ソケット通信はTCP/IPを使用して通信しますので、速度てきには十分な速度がでるかと

※USBでできないとの記載がありましたが、USBでの相互通信ケーブルも販売されてますよ、でもこちらはソフトが組めないので手動で転送となります

ソケットの話に戻して、ポートとIPアドレスを指定して相手とコネクトし、あとはsendを繰り返すだけなので、ソフトが組める方なら、確実で簡単です。
また、参考URL以外にもソケット通信でググるとたくさんのサンプルソフトが公開されているので、用途や完成度を見てお好きなものが使えますよ。

参考URL:http://www.multisoft-lab.com/voicechat/socket.html
    • good
    • 0
この回答へのお礼

再度の回答、ありがとうございます。

USBで繋げる方がうれしいですが、
>※USBでできないとの記載がありましたが、USBでの相互通信ケーブルも
>販売されてますよ、でもこちらはソフトが組めないので手動で転送となります
とのことですので、今回はTCP/IPで検討したいと思います。
TCPである必要もなくUDPで十分、欠損データはどしどし捨ててでもリアルタイム性が重要なので、逆にUDPのほうが適していると思いますが、まずはTCPでつなげてから、UDPへの変更を考えようと思います。

また有用なWEBページを教示くださりありがとうございます。
参考にさせていただきます。

お礼日時:2012/09/18 05:14

No2です。



>>>あるいは、ネットを丹念に探せば、どこかに参考になるソースがあるかもしれませんね。
探しているのですが見つからず、質問しています。
何かご存知なら、よろしくお願いします。

「あるかもしれませんね。」と書いたように、私もネット上で雛形となるようなソースを探し出すことはできませんでした。
やや高価ですけど書籍「詳解TCP/IP(ピアソンエデュケーション)」の掲載ソースと解説を参考にして作成しました。
他の安いTCP/IP関連の書籍は知りたい部分の記載が無く、あまり役に立ちませんでした。
    • good
    • 0
この回答へのお礼

再度の回答、ありがとうございます。

USBならアイソクロナス転送、LAN端子ならUDP転送が希望ですが、まずはTCP/IPでの接続の方向で検討したいと思います。

>やや高価ですけど書籍「詳解TCP/IP(ピアソンエデュケーション)」の掲載ソースと解説を参考にして作成しました。
>他の安いTCP/IP関連の書籍は知りたい部分の記載が無く、あまり役に立ちませんでした。

貴重な経験談、感謝です。

お礼日時:2012/09/18 05:26

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