Winsock「アドレスが使用されています」 UDPにてブロードキャスト送信されたメッセージを受信するプログラムを作成したいのですが、既に他のソフトで監視状態である場合、VB6にて作成したプログラムでもメッセージを受信することは可能でしょうか?

このQ&Aのポイント
  • UDPにてブロードキャスト送信されたメッセージを受信するためのVB6プログラムを作成したいが、既に他のソフトがメッセージを監視している場合、メッセージを受信できるかどうか。
  • WinsockのBindメソッドで「アドレスが使用されています」というエラーが発生し、既に他のソフトが同じポート番号を使用していることが原因と考えられる。
  • 専用の常駐ソフトがメッセージを受け取り、メッセージを表示するが、自作のプログラムでも同様のメッセージを取得できないか試行錯誤している。
回答を見る
  • ベストアンサー

Winsock「アドレスが使用されています」

UDPにてブロードキャスト送信されたメッセージを受信するプログラムを作成したいのですが、既に他のソフトで監視状態である場合、VB6にて作成したプログラムでもメッセージを受信することは可能でしょうか? ある処理が完了すると機器から処理完了のブロードキャストメッセージが送信されます。 通常は専用の常駐ソフトがメッセージを受け取り、パソコンに「処理が完了しました」的なメッセージが表示されるのですが、当方で作成したプログラムでもこのメッセージが取得できないか試行錯誤しています。 下記のサイトを参考にWinsockを使ったサンプルプログラムを作成してみました。 ttp://www.comel.or.jp/~akira/soft/udp_s1/udp_s1.html しかし、専用の常駐プログラムを終了しておくとうまく機器からのメッセージを受け取れるのですが、専用の常駐プログラムが起動していると、WinsockのBindメソッドでエラーとなってしまいます。(「アドレスが使用されています。」) 指定ポート当てに送られたブロードキャストメッセージを複数のプログラムで受け取ることはできないのでしょうか。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

Bindしたソケットが生きている限り、後から作るソケットはBind できませんので、同じIPアドレスでは不可能です。 ということで、自PCにもう一つのIPアドレスを与えて、そちらで Bindしてみて下さい。IPアドレスの追加はコントロールパネルを 使って行うことができます。

imobito
質問者

お礼

当方でも再度調べてみたのですが無理なようですね・・・ 代案までご呈示頂きありがとうございました。 今回は作成したソフトを入れるパソコンのIPアドレスを、当方でいじれない為、なにか他の方法を考えたいと思います。 大変参考になりました。ありがとうございます。

imobito
質問者

補足

回答頂きありがとうございます。 やはり専用の常駐プログラムが起動している状態では無理と言うことですかね・・・ 解決策としてご呈示頂いたもう一つのIPアドレスを与える方法ですが、IPアドレスの追加というのはどのように行うのでしょうか。 パソコンに2つのネットワーク機器が接続されていればできそうですが、ネットワーク機器(LANボード)が一つの場合でも可能でしょうか?

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

>ネットワーク機器(LANボード)が一つの場合でも可能でしょうか? できますよ。以下を参照してください。 http://www.atmarkit.co.jp/fwin2k/win2ktips/608incipaddr/incipaddr.html

imobito
質問者

お礼

なるほど、複数追加できるのですね。 大変参考になりました、ありがとうございます。

関連するQ&A

  • [winsock]多分レベル低い質問です

    インターネット越しにマシン間でUDPのテストをすべく、 http://www.geekpage.jp/programming/winsock/udp.php の受信プログラムと送信プログラムをまるまるコピーして、その後送信プログラムをちょっといじりました。 まず setsockopt(sock,SOL_SOCKET,SO_BROADCAST,(const char *)&TorF,sizeof(BOOL)); を追加し、 addr.sin_addr.S_un.S_addr = INADDR_BROADCAST; としました。 (TorF変数はBOOL型変数でTRUEで初期化してあります) そして送信プログラムと受信プログラムを別のマシン上に置いて、まず受信プログラムを起動して、送信プログラムを実行しましたが、受信側ではrecv関数待ちが続くだけで、いっこうにデータを受信できません。 備考: ローカルでテストを行ったところ、問題なく受信できました。 ブロードキャストでなく、直接IPを指定してマシン間で送受信をしても、やはりrecv関数でとまってしまいます。 そこで質問ですが、winsockを使用して別のPC間でUDP通信を行う場合、これ以外に設定が必要なのでしょうか。

  • WinSockとWinPcapについて

    いつもお世話になります。 今、UDPパケット送受信ソフトを生成しています。 送信ソフトはWinSockを用いて作成しました。 受信ソフトをWinSockを用いて作成しましたが、 受信パケット数をカウントしようと思い、 recvfrom()でカウントしましたが、正常にカウントされない 保障されないことがWinSockではわかりました。 受信パケット数をカウントするには、 デバイスレベルで(Ethereal/WireShark)で行っている ようにWinPCapを用いると パケットをカウントできるのではないかと考えられます。 WinPcapでパケット受信を行う場合、 送信がWinSockで送信していても問題ないでしょうか? また、WinPcapでパケットを受信するには どうしたらいいのでしょうか? どうぞよろしくお願い致します。

  • Winsock

    チャットプログラムを作りたく思い、初めてWinsockプログラミングにとりかかることになりました。 ログイン時に存在を知らしめるため、RemoteHostプロパティ???.???.???.255(じぶんちねっと)相手にUDP15500ポートに文字列を送信します。 マシンA UDP15500で待ち状態 マシンB UDP15500で待ち状態 マシンA ???.???.???.255のUDP15500に文字列送信 マシンA 受信 マシンA 送信 マシンA 受信 マシンA 送信 マシンA 受信 ・・・何度やっても同じ。 マシンB 送信 マシンA 受信 マシンB 受信 ・・・ここでなぜか両方受信できる。 マシンA 送信 マシンB 受信 マシンA 送信 マシンB 受信 マシンB 送信 マシンA 受信 マシンB 送信 マシンA 受信 マシンB 送信 マシンA 受信 ・・・・ 最初は自分で送ったメッセージを自分が受信してるだけなのですが、そこでもう片方がメッセージを送ると両方が受信します。 その後、どちらがメッセージを送っても、もう片方に届くだけで、自分には届きません。 しかし、両方のプログラムを再起動すると、また、同じ動作が最初から確認できます。 これはいったい、何が原因でこういうことになってるんでしょう。 もう1つ質問があります。 このようなサーバーを必要としないようなチャットプログラムのようなものを作るとき、そもそもUDPを使っていいのか、ポートは何番を使っていいのかとか、教えてもらえませんか?

  • ブロードキャストアドレスについて

    (1) 172.24.113.201というパソコンから172.24.255.255にUDPで送信しました。 すると、172.24.113.*のパソコンはすべて受信できたのですが、172.24.111.*と172.24.112.*はどれも受信できませんでした。 (2) 172.24.113.201から172.24.111.255にUDPで送信しました。 しかし172.24.111.*はどれも受信できませんでした。 (3) 172.24.113.201から172.24.111.201にUDPで送信しました。 すると、172.24.111.201は受信できました。 ブロードキャストアドレスって、どういう風になっているんでしょう。 そのネットワークのすべてのコンピュータを表すと聞いたのですが、同じネットワーク内でしか使えないんでしょうか。 (3)が成功したので、プログラムなどの問題ではないと思うのですが。 ファイアウォールとかでもないですよね。 だれかブロードキャストアドレスについて詳しい方いませんか?

  • winsockで複数のLANカードを使用するには

    winsock初心者です。 TCPまたはUDPにて1枚のLANカードで通信するプログラムはよくあるのですが 複数のLANカードで通信する場合の参考プログラムがありません。 具体的には, UDPクライアントを作成する場合,指定したLANカード(IPアドレス)に生成したsocketとリンクして通信させたいのです。 bind()のsockname.sin_addr.s_addrにてINADDR_ANYではなくカードに設定したIPアドレスを設定すればよいのでしょうか? 同じ疑問がTCPクライアント作成でもあります。 この場合bind()ではなく,connect()で送信したいカードに接続されるサーバー側のIPアドレスを指定するということでしょうか? また2枚のカードを使用する場合,同じネットワークアドレス(192.168.0.XXX)は使用しない方が良いのでしょうか?(UDPブロードキャストだと両カードで送信してしまう?) 色々調べてますがこれだという回答がみつかりません 誰かご存知でしたら御教示願います。

  • winsockのポート指定について

    winsockを使ったUDPのプログラムを作成しています。開発環境はVC.NET/win2000です。 UDPサーバで受信側のプログラムとして、   ・sin_port に受信ポート番号を設定   ・socket   ・bind という流れでソケット生成をしています。 上記の流れを1プロセスで1度行って、1プロセスにつき1ポートに対応した メッセージを受信しているのですが、 1プロセスで複数ポートを対象に受信を行うことは可能なのでしょうか?   ・ポート番号を複数指定する   ・ソケットを複数生成する など・・・  方法がわかりません。 すみませんが回答をよろしくおねがいします。

  • Winsock で UDPパケットのデータロスト

    Winsockを使用して で UDP/IPパケット受信するアプリケーションを作成しましたが、Winsockで UDP/IPデータを取りこぼしています。何か回避手段や対策がありましたらお教えいただけないでしょうか よろしくお願いします

  • UDP/IPでのソケット作成について(winsock)

    UDP/IPでのソケット作成について(winsock) 開発環境VC++.NET、O/S WIN2000にてソケットプログラミング(winsock2.0)をしています。 コンソールプログラミングではありませんが、WindProcは持っていません。 UDPサーバーを作り、複数クライアントの対応をしたいと考えています。 クライアントAからの通信やりとり中に クライアントBからの通信がきたら、そちらとも通信やりとりを(自動で)行いたい。 ここで問題なのが、クライアントAの要求ポートが15000で、 クライアントBの要求ポートも15000なのです。 同じ既に開いているポートでソケット作成しようとしても、socket()関数はエラーを返してくるのですが、 やり方を工夫すれば、同一ポートでの複数クライアント対応は可能なのでしょうか。不可能なのでしょうか。 可能であれば、やり方、ヒント等教えてください。よろしくお願いします。 追記 (1)TCP/IPでは、同一ポートでソケット作成が可能でした。ネットで探したサンプルプログラムが  そのような動きをしていたのですが、UDPに書換えることはできませんでした。  http://eternalwindows.jp/network/winsock/winsock04s.html (2)UNIXの場合fork()処理後に socket()作成 → bind()で同一ポートでの複数クライアント対応が  上手くいくらしいのですが、Windowsではマルチスレッド等をうまく活用すれば、  fork()と同様の処理が可能になり、目的が達成できるでしょうか。

  • Winsockでの送信(TCP)

    Winsockでの送受信プログラムを作成しています。 システム構成としてはサーバーが1つあって、それに複数のPC(クライアント)を接続します。 そしてチャットのようにやりとりを行うプログラムを作成しています。 しかし、チャットと違う点は、文字を、指定した相手(IPで指定)にのみ送信するということです。 自分で調べた結果UDPを用いれば簡単だということを知りました。(sendtoで送信先IPが指定できるから) しかし、TCPのほうが信頼性が高いということでTCPでやりたいと思いました。(勉強にもなるので) どなたかやり方をご教授お願いいたします。

  • winsockについて

    winsock、非同期モードでTCP/IP通信を行うようなプログラムを作成しています。 通常の同期モードでのプログラムは完成させることができました。 そこで、クライアント側を非同期モードにし、受信バッファにデータが入ったら受信するというようなプログラムにしたのですが、どうもうまく動作してくれません。 やはりサーバー側も非同期モードにしなければならないのですか?? どなたかご教授お願いします。