【问题标题】:Binding Indy TidHttpServer with one of the Network cards将 Indy TidHttpServer 与其中一张网卡绑定
【发布时间】:2013-03-20 17:37:47
【问题描述】:

我有一个使用 Indy 10 TidHttpServer 在 delphi xe2 上实现的 web 服务,在局域网中运行良好。

我发现的问题在于一台有 2 个网卡的计算机,一个是正常工作的常规 NIC,另一个是虚拟 NIC,它将流量路由到连接到电话公司的 x.25 线路以进行信用卡处理.

如果服务器重新启动(我他们喜欢经常这样做),windows 会首先安装虚拟 NIC,然后我的服务器会以某种方式绑定到它。我根本不明白它是如何工作的。

我在 indy 的文档中读到它应该绑定到所有 ip,并且应该监听两个网络。然而,这并没有发生。我基本上使用默认配置,除了分配给8888的端口。

有没有办法从 indy http 服务器中排除这个网卡?

如果可能的话,我正在寻找一个例子。

本地网络在 192.* 范围内,虚拟网卡在 187.* 范围内。今天要让它工作,我需要禁用虚拟网卡,加载我的服务器,然后再次启用虚拟网卡。工作正常。但如果重新启动,我需要再做一遍。

【问题讨论】:

    标签: delphi http indy


    【解决方案1】:

    您可以通过在激活服务器之前手动添加和配置绑定来将您的服务器绑定到特定卡。一个基本的例子是这样的:

    uses IdSocketHandle;
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      SHandle: TIdSocketHandle;
    begin
      TIdTCPServer1.Bindings.Clear; //make sure there's no other bindings
      SHandle := IdTCPServer1.Bindings.Add;
      SHandle.IP := '192.168.0.15';
      SHandle.Port := 3748;
      IdTCPServer1.Active := True;
    end;
    

    如您所见,该示例是使用TIdTCPServer 完成的。它适用于任何TIdCustomTCPServerdescendant,包括TIdHTTPServer

    【讨论】:

    • 次要建议:先使用IdTCPServer1.Bindings.Clear 清除现有绑定,以避免打开套接字(例如在默认IP 地址上)
    • 是否可以使用某种掩码来定义 ip?大多数情况下,IP 范围是 192.* 和 10.*,它们是本地 IP,在这种情况下,我几乎不需要配置。
    • eelias,您必须使用实际的 IP 地址来进行绑定,但您可以在运行时遍历所有 IP,以找到与您想要的任何条件匹配的 IP,然后配置绑定。
    • 小话,我是第一个回答但我会删除我的答案,因为它们是相同的:)
    • 我没有生气,这只是一个评论。无论如何,jachguate 的回答比我的更“完整”,所以我真的不介意;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 2017-02-08
    • 1970-01-01
    • 2013-07-18
    相关资源
    最近更新 更多