2012-04-09 48 views
0

我正在使用TcpClient和套接字進行P2P聊天應用程序。網絡選擇

我已經寫下面的代碼來接受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) 
    { 

    } 
} 

的問題是,它選擇不同的網絡[我有1 LAN和2個VMWARE網絡]每一次。所以問題是如何強制它採用局域網的網絡地址,即特定的網絡?

+1

用**語言標記問題**這是關於。 – deceze 2012-04-09 05:11:17

回答

0

您正在從DNS主機名抓取本地IP地址。問題很可能是一個或兩個(但按順序)將自己的地址註冊爲主機名。您有幾個選項:1)更改DNS主機名稱以指向正確的地址; 2)具體抓取地址,功能GetHostAddresses以IP地址作爲參數或主機名。

0

因此,這是所有關於如何爲你似乎已經在做檢測的正確localIP傳太的TcpListener構造:

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

這是我們的開源網絡中解決了一個特別是非小問題框架,networkComms.net。如果你看一下,吸氣的LocalIP上線80 here,也有這樣做的幾種方法:

  1. 平已知的外部IP,然後使用由OS(使用IPHLPAPI選擇網絡適配器.dll,所以只支持windows)。
  2. 使用NetworkInterface.GetAllNetworkInterfaces()和選擇一個,其中一個IP所提供的前綴相匹配,通過所有已知的IP適配器搜索諸如192 *等

如何使用的基本11示例networkComms.net也可能有興趣,here