まず、「別のソフトウェアのポートにバインドする方法」の問題ではありません。いくつかのUDPソケットは、同じポートにバインドされていますか?
今、私はTCPに基づいて、クライアントサーバーアプリケーションを持っていると私はそれUDPしたいのですが、私は何かが欠けています。..
私はこれまで(私は入れ)2つのルールを持っていますアプリケーション:
1)「サーバー」は、ポート転送構成なしでルータの後ろにとどまることができます。
2)「クライアント」は1つのポートだけを聞くことができます。
私はこのようにそれを行う:
1)サーバは、ポートX.
2)クライアントがサーバへの通信チャネルをオープンしたいときに依頼する最初のソケットを使用して上のクライアントへの初期接続をオープン新しいもの用のサーバー。
3)サーバーは新しいソケットを作成し、ポートXのクライアントに接続します。 4)クライアントはこの新しい接続をポートXで受け入れ、クライアントはこの新しいソケットでサーバーと通信します。
このように私は同じポート上で複数の接続を持つことができます。サーバは、クライアントがサーバーへの通信チャネルをオープンしたい場合には、要求を送信し、ポートX.
2)上のクライアントへの初期接続DGRAMを送信
1)
UDPで、私は少し問題を抱えています。..最初のソケットのaddrに新しいソケットを追加します。
3)サーバーはメッセージを受信し、新しいudpソケットを作成し、それを使用してポートXのクライアントにデータを送信します。
4)クライアントは新しいdgramを受け取ります。
基本的に私はこの接続を「受け入れる」ことを今起きたいと思っています。新しいUDPソケットを作成し、それをポートXにもバインドし、その特定の着信ソケットaddr(ip、port)からのデータだけを受け取ることを意味します。私は同じポートに複数のソケットをバインドすることはできませんので、私はそれを行うことはできません。
1つのポートに複数のudp接続を作成する方法は何ですか? UDPはコネクションレスプロトコルであるためステップ4であなたがUDPメッセージの内容を確認し、どのように決定し、
感謝:)
UDPは「接続済み」プロトコルではなくデータグラムプロトコルであるため、UDPとの「接続」はできません。 – sfk
と私はUDPの問題で "接続"という言葉を言っていないことに非常に注意しました。私が「接続」と言うとき、私は答えるための門を開くことを意味する。 だから私が望むのは、(外部からブロックされている)サーバーサイドだけで、UDP dgramをクライアントに送信するためです。クライアントは後でそのソケットにdgramを送信し、その特定のソケットからdgramを受け取ります) 同じポート上に新しいソケットをバインドして、必要な(ip、port)からのデータだけを受け取ることができました。 – RoeeK
@sfk UDPはステートレスなプロトコルですが、connect()コールはソケット操作に大きな影響を与えます。例えば、FreeBSDでは、接続されていない限り、UDPソケットからのエラー(ICMPの宛先は到達不能など)を取得できません。 – WGH