相关疑难解决方法(0)

获取本地IP地址

在互联网上有几个地方向您展示如何获得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地址.

c# networking

269
推荐指数
12
解决办法
49万
查看次数

将两个UDP客户端连接到一个端口(发送和接收)

我尝试了这个问题的建议收效甚微.

请...任何帮助将不胜感激!

这是我的代码:

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)

c# port udpclient reusability

9
推荐指数
1
解决办法
3万
查看次数

UDP打孔-可靠的算法

我正在利用UDP打孔创建P2P应用程序。多亏了这个令人惊叹的论坛,我才得以实现-我可以在2台设备之间建立P2P连接!我的应用主要基于此帖子。我的主要目标是创建一种可靠的算法,以在2个设备之间建立P2P连接。

该应用程序当前能够建立连接-但在我看来,它是非常随机的,我需要它能够可靠地工作。有3种设备:

  1. 我的电脑[A]
  2. 公用服务器[B]
  3. 计算机位于其他非本地网络中[C]

我的方法:

  1. 了解设备的外部端口和IP
  2. 开始从[A]到[B]发送UDP数据包,反之亦然,直到建立的连接作为NAT应该与内部和外部端口匹配为止
  3. 在两个设备([A]和[B])上使用Wireshark查看数据包流,因此我不依赖于应用程序本身会遇到一些问题

问题: 我尝试发送数据包至少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)

c# udp

5
推荐指数
0
解决办法
34
查看次数

标签 统计

c# ×3

networking ×1

port ×1

reusability ×1

udp ×1

udpclient ×1