【问题标题】:How to connect using specific network adapter?如何使用特定的网络适配器进行连接?
【发布时间】:2018-11-01 15:16:44
【问题描述】:

我们正在使用 Delphi Berlin 10.2

我们有一个应用程序可以在具有 2 个或更多以太网适配器的设备上运行。我们必须选择特定的网络适配器。

我进行了研究,但未能找到使用 Indy、Synapse 甚至 Winsock 的方法。

连接方法不提供此选项,它们仅提供目标 IP 和端口。

有没有办法做到这一点?

【问题讨论】:

    标签: delphi network-programming


    【解决方案1】:

    您需要将客户端套接字bind() 连接到所需网络接口的本地 IP 地址,然后connect() 将使用该接口所连接的网络访问服务器的 IP:port。

    Indy 有用于此目的的属性,例如 TIdTCPClientBoundIP 属性。

    我确信 Synapse(和大多数其他网络库)也有它自己的等价物。

    【讨论】:

    • 感谢您的快速回复!抱歉,也许我的解释不清楚……事实上,我们有一个应用程序在具有两个网络适配器的设备上运行。目标 IP(放置在 BoundIP 属性中以进行连接)已定义,则不是问题。问题是如何选择这些物理接口中的哪些将进行通信。是否有定义物理网络输出接口的解决方案?谢谢。
    • @GabrielM.T. BoundIP 用于客户端想要使用的所需网络的本地 IP。 Host 用于 destination 主机名/IP。每个网络接口都有自己的 IP 地址。因此,将您的客户端绑定到所需接口的本地 IP,然后将 connect 绑定到所需的服务器 Host
    • 雷米,感谢您的回复!对不起,我对 BoundIP 定义的错误。最后一个疑问:如果这两个网络接口的IP相同,可以识别吗?在我的解决方案中,这种情况(相同的 IP)是可能的,因为其中一个接口将通过 DHCP 连接到客户 LAN,而另一个具有固定 IP,位于我的专有网络上。请参阅下面的架构:imgur.com/a/0Sv3pVZ
    • @GabrielM.T.如果多个接口具有相同的 IP 地址,则无法区分它们以进行绑定,至少在 Windows 上是这样,因为它只能通过 IP 绑定。在 Posix 平台上,接口也可以通过其名称或索引而不是 IP 来绑定。 Indy 目前没有实现对它的支持,但是尝试使用客户端的 OnSocketAllocatedOnAfterBind 事件手动进行相关的 Posix API 调用。但是,您确实应该努力确保您的“专有”网络使用与其他网络不同的 IP。它应该在不同的子网上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多