2

私のマシンには、2 つの別々の IP アドレスで構成された 2 つのインターネット カードがあります。どちらの IP アドレスも同じネットワークの一部です。ソケットを作成すると、これらの IP アドレスのいずれかに固有であると言うのは正しいですか?

アップデート:

これが私の状況です:

192.168.0.10 にあるハードウェア デバイスがあります。udp 経由で (192.168.0.11, 50000) および (192.168.0.12, 50000) に通信します。ハードウェア デバイスは、(192.168.0.10, 49000) と (192.168.0.10, 49001) の 2 つのポートを介してこれを行います。

スクリプトを使用してポート (192.168.0.11, 50000) と (192.168.0.12, 50000) を作成し、通信をログに記録して操作できるようにします。データは、ハードウェアと通信できる 2 つのシミュレーターに転送されます。

したがって、実際には、私のスクリプトは「中間者」であり、ハードウェアをテストする目的でデータをログに記録して破損させます。

私のスクリプトのソケットインターフェースは次のとおりです。

IP 1 - Channel 1

External_socket = (192.168.0.10, 49000) ** Hardware
External_side_socket = (192.168.0.11, 50000) ** Script
Simulator_side_socket = (192.168.0.11, 50001) ** Script
Simulator_socket = (192.168.0.11, 50002) ** Simulator

IP2 - Channel 2

External_socket = (192.168.0.10, 49001) ** Hardware
External_side_socket = (192.168.0.12, 50000) ** Script
Simulator_side_socket = (192.168.0.12, 50001) ** Script
Simulator_socket = (192.168.0.12, 60002) ** Simulator

これは期待どおりに機能し、正しいデータがチャネルごとにログに記録されます。

ただし、次の 2 つの簡単な変更を行うと、機能しなくなります。

1) 2 番目のシミュレーターの構成ファイルを 60002 から 50002 に変更し、IP アドレスは 192.168.0.12 のままにします。

2) 私のスクリプトでは、IP2 用に 60002 を 50002 に変更しています。

突然、2 番目のチャネルからのデータが最初のシミュレータに到着します。どうすればいいの?.netにはIPAnyがあり、シミュレーターがこれを何らかの形で使用していて、構成ファイルのIPアドレスを無視しているかどうか疑問に思っています。それがここの問題かもしれないと思いますか?

ありがとう、

バリー

4

2 に答える 2

0

正しいと思います。ステートメントで使用する抽象化のレベルによって異なります。

ソケットを作成するとき、それはIPアドレスにバインドされていません。バークレーソケットに関するウィキペディアの記事を見ると、最初の記事で、ドメインソケットタイプ、およびファミリsocket()を示すソケット()が作成されていることがわかります。次に、ソケットはアドレス(10.0.0.1など)にバインドされます()。次に、ソケットを何に使用するかに応じて、リッスン、受け入れ、または接続するようにソケットを設定できます。bind()

ローカルホストには、他のデバイスと同じIPアドレス、つまり127.0.0.1があります。ソケットを作成し、それを127.0.0.1にバインドします。その場合、そのソケットは、通信可能な他のソケットと同じように機能します。

ネットワークソケットに関するウィキペディアの記事も読むことができます。

于 2012-04-12T09:00:27.473 に答える
0

bind値を使用できますINADDR_ANY。これは、特定のネットワーク インターフェイスにバインドしないことを意味するため、プログラムが実行されている IP アドレスを無視して作業できます。

ここここを参照してください。

于 2015-11-30T11:58:59.933 に答える