我正在使用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网络]。那么问题是如何强制它获取LAN的网络地址,即特定的网络?
答案 0 :(得分:0)
您正在从DNS主机名中获取本地IP地址。问题可能是一个或两个(但按顺序)自动将其地址注册为主机名。您有几个选项:1)更改DNS主机名以指向正确的地址; 2)具体获取地址,函数GetHostAddresses将IP地址作为参数或主机名。
答案 1 :(得分:0)
请this answer建议不要使用Dns.GetHostAddresses
,并提供更全面的方法。
不确定,但我认为System.Net.NetworkInformation.IPInterfaceProperties可能会引起人们的兴趣。
答案 2 :(得分:0)
所以这就是如何检测正确的localIP以传递TcpListener构造函数,因为你似乎已经在做了:
TcpListener tcpl = new TcpListener(new IPEndPoint(ip_local, 9277));
这是我们在开源网络框架networkComms.net中解决的一个特别重要的问题。如果你看看第80行here的Getter for LocalIP,有几种方法可以做到:
如何使用networkComms.net的基本11示例也可能是有意义的,here。