在互联网上有几个地方向您展示如何获得IP地址.其中很多看起来像这个例子:
String strHostName = string.Empty;
// Getting Ip address of local machine...
// First get the host name of local machine.
strHostName = Dns.GetHostName();
Console.WriteLine("Local Machine's Host Name: " + strHostName);
// Then using host name, get the IP address list..
IPHostEntry ipEntry = Dns.GetHostEntry(strHostName);
IPAddress[] addr = ipEntry.AddressList;
for (int i = 0; i < addr.Length; i++)
{
Console.WriteLine("IP Address {0}: {1} ", i, addr[i].ToString());
}
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我得到了几个IP地址,但我只对获得路由器分配给运行程序的计算机的一个感兴趣:如果他希望访问我计算机中的共享文件夹,我会给某人的IP实例.
如果我没有连接到网络,我通过没有路由器的调制解调器直接连接到互联网,那么我想得到一个错误.如何查看我的计算机是否通过C#连接到网络,以及是否要获取LAN IP地址.
请...任何帮助将不胜感激!
这是我的代码:
static void Main(string[] args)
{
IPEndPoint localpt = new IPEndPoint(IPAddress.Any, 6000);
UdpClient udpServer = new UdpClient(localpt);
udpServer.Client.SetSocketOption(
SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
UdpClient udpServer2 = new UdpClient();
udpServer2.Client.SetSocketOption(
SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
udpServer2.Client.Bind(localpt); // <<---------- Exception here
}
Run Code Online (Sandbox Code Playgroud) 我正在利用UDP打孔创建P2P应用程序。多亏了这个令人惊叹的论坛,我才得以实现-我可以在2台设备之间建立P2P连接!我的应用主要基于此帖子。我的主要目标是创建一种可靠的算法,以在2个设备之间建立P2P连接。
该应用程序当前能够建立连接-但在我看来,它是非常随机的,我需要它能够可靠地工作。有3种设备:
我的方法:
问题: 我尝试发送数据包至少10分钟,其频率从每秒10个数据包到每10秒一个数据包,其频率不同,我将重新启动设备和路由器,这些数据包再也无法通过了。
解决方案: 通常在从设备[A]发送几个数据包并停止后,再从设备[B]发送数据,然后建立连接。然后,两个设备将能够同时发送和接收数据包。这种方法不可靠,我不得不手动操作来回发送数据包,直到数据包开始通过为止。
两种设备具有相同的应用程序:
初始化UDP客户端:
private static UdpClient udpClient = new UdpClient();
public void SetUPUDP(IPEndPoint LocalEndPoint)
{
udpClient.ExclusiveAddressUse = false;
udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
udpClient.Client.Bind(LocalEndPoint);
//https://stackoverflow.com/questions/7201862/an-existing-connection-was-forcibly-closed-by-the-remote-host
uint IOC_IN = 0x80000000;
uint IOC_VENDOR = 0x18000000;
uint SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12;
udpClient.Client.IOControl((int)SIO_UDP_CONNRESET, new byte[] { Convert.ToByte(false) }, null);
}
Run Code Online (Sandbox Code Playgroud)
听力部分:
public static async Task<string> StartListening(IPEndPoint LocalEndPoint)
{
Console.WriteLine("Listening on " + LocalEndPoint + "."); …Run Code Online (Sandbox Code Playgroud)