IndyのUDPコンポーネント
UDPを使用するアプリケーションを作成していて気がついたことを書き留める。
Borland C++ BuilderにはもともとMNUDPなるコンポーネントが付属しています。
実はこのコンポーネントには大きな問題があってこのコンポーネントをフォームに
貼り付けてしまうと問題が起きます。
問題とは作成したアプリケーションを起動したままでシャットダウンするとアプリ
ケーションが終了されなくシャットダウン中に止まってしまうというもの。
原因はこのコンポーネントの終了処理に問題があって削除がうまくできない
ということのようです。実はこのNM***という一連のコンポーネントは別の会社が
作成したもののサブセットか、旧バージョンをおまけに付けているということのよう
なのですが、いろいろと問題があるコンポーネントです。ほかのコンポーネントにも
バグがあるというような話を聞いています。
どうも、問題のないものがほしければオリジナルの会社から買えということらしい
のですが、少なくともこのNMUDPに関する不具合は直っていないようです。
この問題に関してはいろいろな人が対応策を考えているようですが、確実で
簡単なのはこのコンポーネントかそれを貼り付けたフォームは動的に生成して
必要がなくなったらさっさと破棄することです。
上記のような問題もあり使いにくかったので C++ Builder6 にしてからは付属の
Indy の方のコンポーネントに変えました。
Indy の UDP Server を使用していて気がついたことが1つあります。
フォームにコンポーネントを貼り付けて Active プロパティを false にしておきます。
アプリケーション起動処理の中でポート番号などを設定してから Active プロパティを
trueにするまではいいのですが、必要があっていったん Active=false にすると再度
true にしてもうまく受信イベントを呼び出してくれなくなります。
時間がなくて理由は追っかけていません。
通常こういうことはしないのであまり問題はないと思いますが。
| 固定リンク
この記事へのコメントは終了しました。
コメント
こんにちは、最近Indy9を使い始めた者です。
C++ Builder5を使用しております。
私も同じ状況に陥り、ここの記事に辿り着きました。
UDPServerを張り付けたソフト上でDefaultPortを変更できる様にしてiniファイルに書き込むこととし
起動時にActive=false状態でiniファイル読込んでDefaultPortをセットしてからtrueに
することとしました。
受信側UDPServer->DefaultPort=10000とし
送信側UDPServer->Send(--,ポート10000,--)で
正常に受信出来ている状態で、受信側のソフト上で
DeafaultPortを例えば10001に書換えても受信します。
ポート番号が10000のままになっていると思われます。
受信側プログラムを再起動するとポート変更が反映されて
受信しなくなるんですが
再起動しなくてもポート反映される方法がないものでしょうか?
投稿: レイ | 2020.06.04 10:46