【发布时间】:2018-11-01 15:16:44
【问题描述】:
我们正在使用 Delphi Berlin 10.2
我们有一个应用程序可以在具有 2 个或更多以太网适配器的设备上运行。我们必须选择特定的网络适配器。
我进行了研究,但未能找到使用 Indy、Synapse 甚至 Winsock 的方法。
连接方法不提供此选项,它们仅提供目标 IP 和端口。
有没有办法做到这一点?
【问题讨论】:
标签: delphi network-programming
我们正在使用 Delphi Berlin 10.2
我们有一个应用程序可以在具有 2 个或更多以太网适配器的设备上运行。我们必须选择特定的网络适配器。
我进行了研究,但未能找到使用 Indy、Synapse 甚至 Winsock 的方法。
连接方法不提供此选项,它们仅提供目标 IP 和端口。
有没有办法做到这一点?
【问题讨论】:
标签: delphi network-programming
您需要将客户端套接字bind() 连接到所需网络接口的本地 IP 地址,然后connect() 将使用该接口所连接的网络访问服务器的 IP:port。
Indy 有用于此目的的属性,例如 TIdTCPClient 的 BoundIP 属性。
我确信 Synapse(和大多数其他网络库)也有它自己的等价物。
【讨论】:
BoundIP 用于客户端想要使用的所需网络的本地 IP。 Host 用于 destination 主机名/IP。每个网络接口都有自己的 IP 地址。因此,将您的客户端绑定到所需接口的本地 IP,然后将 connect 绑定到所需的服务器 Host。
OnSocketAllocated 或 OnAfterBind 事件手动进行相关的 Posix API 调用。但是,您确实应该努力确保您的“专有”网络使用与其他网络不同的 IP。它应该在不同的子网上。