2012-04-09 9 views
0

私は、TcpClientとソケットを使ってP2Pチャットアプリケーションを開発しています。ネットワークの選択

IはれるtcpClientを受け入れるために、次のコードを書かれている:

IPAddress[] ip = Dns.GetHostAddresses(Dns.GetHostName()); 
IPAddress ip_local = Dns.GetHostAddresses(Dns.GetHostName())[0]; 
// IPAddress ip_local = IPAddress.Parse(ip_local); 
TcpListener tcpl = new TcpListener(new IPEndPoint(ip_local, 9277)); 
while (true) 
{ 
    try 
    { 
     tcpl.Start(); 
     TcpClient tcpClient = tcpl.AcceptTcpClient(); 
     StateObject state = new StateObject(); 
     state.workSocket = tcpClient.Client; 
     tcpClient.Client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, 
      new AsyncCallback(OnReceive), state); 
    } 
    catch (Exception ex) 
    { 

    } 
} 

問題は、それが異なるネットワーク[I 1 LANおよび2つのVMWAREネットワークを有するよう]毎回を選ぶことです。それでは、LANのネットワークアドレス、つまり特定のネットワークを強制的に使用する方法が問題です。

+1

質問に**言語**のタグを付けてください。これはについてです。 – deceze

答えて

0

DNSホスト名からローカルIPアドレスを取得しています。問題は一方または両方(順番に)自分のアドレスをホスト名として自動的に登録している可能性があります。いくつかのオプションがあります:1)DNSホスト名を正しいアドレスを指すように変更する。 2)アドレスを具体的に取得するには、関数GetHostAddressesがパラメータまたはホスト名としてIPアドレスを取得します。

0

これは、すべてあなたがすでにやっているように見えるとして、あまりにもTcpListenerコンストラクタを渡すために正しいlocalIPを検出する方法についてです:

TcpListener tcpl = new TcpListener(new IPEndPoint(ip_local, 9277)); 

これは、我々はオープンソースのネットワークで解決特に非些細な問題でしたフレームワーク、networkComms.net。あなたがライン80 here上LocalIPのgetterを見ている場合は、それをやってのカップルの方法があります。

  1. Pingが知られている外部のIPは、その後、(IPHLPAPIを使用してOSによって選ばれたネットワークアダプタを使用.dll、Windowsはサポートされています)。

等* networkComms.netを使用する方法の基本的な11例(NetworkInterface.GetAllNetworkInterfacesを使用して、すべての既知のIPアダプタを検索)とIPは、192として提供プレフィックスを、一致するものを選択しますまた、興味のあるかもしれない、here

関連する問題