プロが教える店舗&オフィスのセキュリティ対策術

プログラミングに関してなにかヒントがあればご教授いただきたく投稿しました。

VB.net2008 Framework2.0向けで作成中のアプリです。

上記アプリはフォームの中で無線の受信を口を開けて待っています。
 →LOOPの中のある関数で受信するまで待機しています。

そこに VB6の他アプリから「SendMessage HWND_BROADCAST・・・・」をやられると
両方のアプリがハングアップ(フリーズ?)してしまいます。

BROADCASTは全てのウィンドウにメッセージを送ることはわかったのですが
これを回避する方法が見つかりません。
何卒ご教授の程よろしくお願い致します。

A 回答 (3件)

ん? 質問変えた? さっき似たような質問があって、その時に回答しようとしたら質問が消されたので書き込めなかったが、SendMessageで送ったメッセージはAcceptTcpClient()では受け取れないですよ。


なぜWin32 API(on VB6)でブロードキャストしたメッセージをTCPで受け取ろうと思ったんだ? その辺を説明しないと回答は得られんぞなもし。
無線の受信というのもよく意味が分からない。

正直QAサイトで扱える範疇ではないと思うので、いくつか要点を絞ってアドバイス。
送った側のVB6も固まるというのが気になるところではあるが・・・・。

・AcceptTcpClient()をするのはフォームとは別スレッドにしないといけない。さらに得られたTcpClientとやりとりをするのはそれとも別スレッドにすべき。
・SendMessageで発信されたメッセージを.Net側で受け取るのは「WndProc」で情報を集めてくれ。こちらは別スレッドを作る必要はない。
    • good
    • 0
この回答へのお礼

anmochi様
質問変えました。大変申し訳ない次第です。
スレッドあたりの構築をやり直します。
大変わかりやすいご説明を頂きましてありがとうございます。

お礼日時:2013/10/10 19:16

No1のお礼に対して


事前に断わっておきますが私は基本的にVB触ったこと殆どありませんので
具体的なコードなどの提示はしません

ソース見ると作ってるのはサーバプログラムで
クライアントからの接続待ちでループしてるってことだと思いますが
それをどこかのイベントでコールしてるでしょ
根本的な作りが悪い

ブロッキングモードで作ってるようですが
・ノンブロッキングモードに変更する
・スレッド化してスレッドで実行する
どちらかの対処をしてください

それで治ると思います
    • good
    • 0
この回答へのお礼

koi1234様
仰る通りです。
根本を考え直します。勉強もし直します。
誠にありがとうございます。

お礼日時:2013/10/10 19:18

具体的なコードがないので何とも言えないところもありますが



> →LOOPの中のある関数で受信するまで待機
ここで他のメッセージループが止まっていて処理できなくてハングする
といったことではないかという気がします
試にそのループ処理とやらを動かない状態で動作させたらどうなりますか

>VB6の他アプリ
これはあなたが作った別のアプリってことですか?

この回答への補足

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

>> →LOOPの中のある関数で受信するまで待機
>ここで他のメッセージループが止まっていて処理できなく>てハングする
>といったことではないかという気がします
>試にそのループ処理とやらを動かない状態で動作させたら>どうなりますか

その通りで、Loopの中で待機しているので
LOOPを回避すればハングアップはしません

While True
Dim myTcpClient As New Sockets.TcpClient
myTcpClient=myListener.AcceptTcpClient()←ここで待機
Loop

>VB6の他アプリ
これはあなたが作った別のアプリってことですか?
→いえ 他人のアプリでソースは公開されていますが、改修はできないので.net側でどうにかするしかないのです。

何か分りますか? どうか引き続きよろしくお願い致します。

補足日時:2013/10/10 17:00
    • good
    • 0

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