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

C# 将两个UDP客户端连接到一个端口(发送和接收),c#,port,reusability,udpclient,C#,Port,Reusability,Udpclient,我试了一下他的建议,但收效甚微 请。。。任何帮助都将不胜感激 这是我的密码: static void Main(string[] args) { IPEndPoint localpt = new IPEndPoint(IPAddress.Any, 6000); UdpClient udpServer = new UdpClient(localpt); udpServer.Client.SetSocketOption( SocketOptionLeve

我试了一下他的建议,但收效甚微

请。。。任何帮助都将不胜感激

这是我的密码:

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
}
static void Main(字符串[]args)
{
IPEndPoint localpt=新IPEndPoint(IPAddress.Any,6000);
UdpClient udpServer=新的UdpClient(localpt);
udpServer.Client.SetSocketOption(
SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true);
UdpClient udpServer2=新的UdpClient();
udpServer2.Client.SetSocketOption(
SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true);

udpServer2.Client.Bind(localpt);//我查找了您的错误消息,这解释了错误是什么以及发生错误的原因

以下是准确的错误消息和原因WSAEACCES10013()

拒绝许可

试图以其所禁止的方式访问插座 访问权限。例如,使用发送到的广播地址 未使用setsockopt(SO_广播)设置广播权限

WSAEACCES错误的另一个可能原因是当绑定 函数被调用(在带有SP4和更高版本的Windows NT 4.0上),另一个 应用程序、服务或内核模式驱动程序绑定到同一个 具有独占访问权限的地址。这种独占访问是一项新功能 使用SP4和更高版本的Windows NT 4.0,并使用 SO_独家提供德鲁塞选项


即使更改代码以便传入IP地址,我也会收到相同的错误消息,似乎您无法绑定到同一端口,只能使用一个端口 这是我使用您的示例并对其进行修改以从本地计算机捕获ip的示例代码

        IPAddress ipAddress = Dns.Resolve(Dns.GetHostName()).AddressList[0];
        IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 11000);

        //IPEndPoint localpt = new IPEndPoint(ipLocalEndPoint);

        UdpClient udpServer = new UdpClient(ipLocalEndPoint);
        udpServer.Client.SetSocketOption(
            SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
        udpServer.Connect(ipLocalEndPoint);
        UdpClient udpServer2 = new UdpClient();
        udpServer2.Client.SetSocketOption(
            SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

        udpServer2.Client.Bind(ipLocalEndPoint); // <<---------- Exception here
IPAddress-IPAddress=Dns.Resolve(Dns.GetHostName()).AddressList[0];
IPEndPoint ipLocalEndPoint=新IPEndPoint(ipAddress,11000);
//IPEndPoint localpt=新IPEndPoint(ipLocalEndPoint);
UdpClient udpServer=新的UdpClient(ipLocalEndPoint);
udpServer.Client.SetSocketOption(
SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true);
连接(ipLocalEndPoint);
UdpClient udpServer2=新的UdpClient();
udpServer2.Client.SetSocketOption(
SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true);

udpServer2.Client.Bind(ipLocalEndPoint);//绑定之前必须设置套接字选项

    static void Main(string[] args)
    {
        IPEndPoint localpt = new IPEndPoint(IPAddress.Any, 6000);

        UdpClient udpServer = new UdpClient();
        udpServer.Client.SetSocketOption(
            SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
        udpServer.Client.Bind(localpt);

        UdpClient udpServer2 = new UdpClient();
        udpServer2.Client.SetSocketOption(
            SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

        udpServer2.Client.Bind(localpt); // <<---------- No Exception here

        Console.WriteLine("Finished.");
        Console.ReadLine();
    }
要解决UDP应用程序中的WSAEACCESS 10013()异常,可以尝试

udpServer.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);

您收到了什么异常?@M.Babcock我收到的异常消息是:“试图以其访问权限所禁止的方式访问套接字”您的
udpServer
实例在尝试绑定时是否会引发相同的异常?您似乎没有遵循问题中链接中显示的相同代码示例..我看到了IPAddress.Any,6000但是UdpClient udpServer2=new UdpClient(5000)呢?为什么不在try{}catch{}中包装类似的内容呢@M.Babcock如果我没有弄错的话,它在使用端点构造时已经绑定了。在任何情况下,我都尝试过这样做:udpServer.Client.Bind(localpt);在设置套接字选项之后,收到了另一条异常消息:“提供了无效参数”谢谢,但我已经找到了这些信息。我的代码使用了SocketOptionName.ReuseAddress,我认为它本质上是一个独占的eAddruse,但以.NET的方式。似乎需要其他方法来实现这一点,但我似乎找不到它。这将是一个很好的谜题。我想我也在正确的轨道上。我将帮助挖掘更多并尝试代码。它可能非常简单,即使是最有经验的程序员也会仔细检查它。谢谢,我已经看了好几天了…运气不好…这应该是一件非常简单的事情…请尝试运行此代码。当您调试此代码时,您的LocalPt将获得0.0.0:6000这将不起作用,因为0.0.0不起作用真的是一个ip,但无论如何,我会在下面发布我的发现,不确定其他人声称他们是如何让它工作的。这似乎不可能。必须要有一种方法来做到这一点。我的目标是创建一个包含UDP打孔的系统。这取决于我可以在发送数据的同一端口上侦听数据通过……我在这里发布了一个后续问题:为什么在
localpt
上绑定
Bind
和在
inEndPoint
上接收
,有什么不同吗?(如果我在
localpt
上接收
inEndPoint的接收将导致它持有数据包来自的远程套接字。您可以使用localpt,但这样您就无法轻松了解绑定到的本地套接字。
udpServer.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);