【问题标题】:How to run client and server UDP listeners on the same machine如何在同一台机器上运行客户端和服务器 UDP 侦听器
【发布时间】:2024-04-16 01:45:01
【问题描述】:

客户端和服务器都在给定端口上发送和接收。在生产中,它们在不同的机器上,没有问题。在开发过程中,在同一台机器上运行它们会更方便,并且无需部署以及设置和关闭远程调试会话。

我试过了

var uc = new UdpClient();
var ep = new IPEndPoint(address, port);
uc.ExclusiveAddressUse = false;
uc.Client.Bind(ep);

它没有 barf 但我仍然无法将多个侦听器绑定到同一个端点。在我发现 ExclusiveAddressUse 无论如何默认为 false 之后,这种方法只会产生额外的代码。

这可能吗?如果可以,怎么做?

【问题讨论】:

    标签: c# networking udp udpclient


    【解决方案1】:

    您显然不能在同一台机器上使用相同的端口,只需将#if directive 用于debug 并相应地更改您的端口

    以下可能会有所帮助

    客户

    #if DEBUG
        uc client = new UdpClient(34534);
    #else
        uc client = new UdpClient();
    #endif
    

    UdpClient Constructor (Int32)

    初始化 UdpClient 类的新实例并将其绑定到 提供本地端口号。

    备注

    此构造函数创建一个底层 Socket 并将其绑定到端口 您打算与之通信的号码。 使用这个构造函数如果 您只对设置本地端口号感兴趣。这 底层服务提供商将分配本地 IP 地址。如果你 将 0 传递给构造函数,底层服务提供者将分配 一个端口号。如果使用此构造函数,则 UdpClient 实例为 使用无法更改的 IPv4 地址族设置或 被带有 IPv6 目标的 connect 方法调用覆盖。

    免责声明,完全未经测试,只是阅读文档,可能是错误的:)

    【讨论】:

    • 有趣的是,我在很久以前对另一个问题的回答中找到了答案。指令不会解决它,问题是每个端点最多可以有一个 listener 。您可以将多个 sockets 绑定到一个地址/端口对,因为连接由两个端点标识,但侦听器只有一个端点,因此您只能有一个 listener每个端点的套接字。我知道这一点,但我不想知道,因为这太麻烦了。
    • @PeterWone 电脑很烂,很高兴你知道了
    • @PeterWone 你可能想考虑回答你自己的问题
    • 赢了。或许有人也乐在其中!
    最近更新 更多