2016-07-22 10 views
-1

私は現在、同じPC上で同時に実行される2つの.Netアプリケーションを持っています。プロセス間通信用UDP

これらの2つのアプリケーションは、このようにUDPを使用して通信:

クライアント:

udpUnityToConsole = new UdpClient(); 
udpUnityToConsole.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); 
try 
{ 
    udpUnityToConsole.Connect("localhost", 11004); 
} 

サーバー:

unityUdpReceive = new UdpClient(); 
unityUdpReceive.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); 
unityUdpReceive.Client.Bind(new IPEndPoint(IPAddress.Any, 11004)); 

通信ストリームは、高速かつ信頼性の高い、一つだけ問題がそれでありPCがネットワークに接続されていない場合は、

0でクラッシュします。

すでに接続が確立されていて、PCがネットワークから切断されている場合、接続は維持されます。開始するネットワーク接続がない場合のみ、それは失敗します。

ご意見をいただければ幸いです。

+1

ネットワークはいつでも失敗する可能性があります。どこにでもtry-catchでプログラムをラップしてください。 – Tommy

+1

アプリケーションが常に同じマシン上で実行されることがわかっている場合は、名前付きパイプを使用します。 http://stackoverflow.com/questions/13806153/example-of-named-pipesを参照してください。そうすれば、ネットワークは必要ありません。しかし、あなたはまだエラーをチェックする必要があります。 –

+0

私はこの時点で名前付きパイプに変更したくないです。私はすでにUDPバージョン用のかなりのコードを持っており、私はUDPが動作する方法を好む。とにかく私は私の問題に簡単な解決策を見つけました。チップをありがとう –

答えて

0

私がしなければならなかったのは、localhostをローカルマシンのアドレスである127.0.0.1に変更することでした。変更することはないため、使用するのが安全です。 localhostを使用すると、UDPライブラリはlocalhostエイリアスで使用されているIPをルックアップする必要がありましたが、すでに知っていたので必要ではありませんでした。 IPを他の方法で見つけて、両方のアプリケーションでそのクエリを実行することもできます。