3

私のシナリオは次のとおりです。

2つの異なるマシンで実行されている2つのソフトウェアがあります。1つはサーバーとして、もう1つはクライアントとしてです。これらは両方とも、UDPレベルで相互に通信するために同じポートを使用します。(クライアントハードウェアのため、TCPレベルで通信を設定することはできません(限られたメモリ))。このシナリオは、現在15年ほどですでに機能しています。

ここで、このクライアント用のエミュレーターを作成して、クライアントを使用する必要がないようにします(デバッグやトラブルシューティングが必要になるたびに、クライアントを再構成する必要があるため)。そして、それは私がいる場所と同じ場所ではありません。

私が行ったことは、仮想ネットワークカード(de devconユーティリティで作成)にリスナーポートとセンダーポート(サーバーと同じ)を使用して単純なクライアントアプリケーションを作成することでした。

クライアントを実行すると、SocketExceptionが発生します:「通常、各ソケットアドレス(プロトコル/ネットワークアドレス/ポート)の使用は1回のみ許可されます」(これは、クライアントを起動したときに最初に発生することです)

これは、リスナーを作成する行で発生します。UdpClient listener = new UdpClient(listenPort);

osiモデルには、最初にネットワーク層(ip addres)があり、次にポート番号(TCP / UDP層を使用)があります。

7   Application     Process Application     
6   Presentation
5   Session
4   Transport       Host to host          TCP, UDP  Packets
3   Network         Internet              IP, ICMP  Frames
2   Data Link       Network Access        ARP       Bits
1   Physical 

クライアントはサーバーと同じネットワークカードでリッスンしていません(ただし、両方とも同じコンピューターで実行されています)。

私が得られないのは、なぜこのメッセージなのかということです。仮想ネットワークカードを作成して、同じコンピューターで同じポートを使用することはできないのではないでしょうか。(クライアントとサーバーを同じコンピューターで実行したいので)

[編集] セットアップのシナリオ

すべてのネットワークカードに1つのporstリストを使用しているため、すでに使用されているという理由だけで、それが不可能なのではないかと思っていました。次に、私の質問は、「リッスンするポートの2番目のリストを作成する方法(同じコンピューター内の異なるネットワークカードであるため)」です。

これは、VirtualBoxまたはVirtualPCが新しい仮想ネットワークカードを作成するのとほぼ同じです。それらが作成されると、同じポート(仮想マシンですが)でリッスンすることができますが、それでも同じハードウェアです。次に、彼らはそれをどのように行ったのかという疑問が生じます。

[/編集]

4

3 に答える 3

0

問題を解決しました!上記の私の考えの理論は機能します。

私が見つけたのは、私の前任者が現在のコンピューターにあるすべての利用可能なネットワークカードにUdpPortListenerを設定したことです。

 IPEndPoint(IPAddress.Any, receivePort);

聴きたいネットワークカードに設定しましたが、動作します!ここでの結論は、誰かがコードをどのように実装したか(紙に書かれている場合でも)を決して想定せず、実際にどのように処理されるかについて常に「リバースエンジニアリング」を試みることです。

ここで私を助けてくれてありがとう!

于 2012-10-18T12:52:31.183 に答える
0
  1. 仮想マシン内で実行/デバッグできます。
  2. 安く買えますよ(

2 番目の仮想ネットワーク アダプタを追加する限り、マシン上の別のカードを偽装するプログラムは見たことがありません。

于 2012-10-10T09:59:49.763 に答える
0

UdpClient()の新規作成時にポート番号に0を指定する

var clt = new UdpClient(0);

MSDN のドキュメントによると、基盤となるプロバイダーは競合することなく無料のポート番号を割り当てます。

ソフトウェアは、ロボットをテストするためのエミュレーターです。私には、その目的のためにクライアント ハードウェアの仕様に従う必要はありません。

于 2012-10-10T12:31:17.960 に答える