私のシナリオは次のとおりです。
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が新しい仮想ネットワークカードを作成するのとほぼ同じです。それらが作成されると、同じポート(仮想マシンですが)でリッスンすることができますが、それでも同じハードウェアです。次に、彼らはそれをどのように行ったのかという疑問が生じます。
[/編集]