【问题标题】:How to Bind a TServerSocket to a specific IP address如何将 TServerSocket 绑定到特定的 IP 地址
【发布时间】:2016-10-17 19:26:54
【问题描述】:

有谁知道绑定 Delphi TServerSocket 组件以仅接受特定本地地址上的请求的任何方法?

服务器有多个 IP,但它要求服务器应用程序仅在运行时接受一个 IP 上的请求。

【问题讨论】:

    标签: delphi ip-address serversocket


    【解决方案1】:

    TServerSocket 不会直接公开您要求的功能,但是通过一些变通方法是可行的。

    您需要从TServerSocket 派生一个新类才能访问受保护的TAbstractSocket.Address 属性。这是TServerSocket 绑定的值。由于该属性不能正常访问,所以它仍然是一个空字符串,这与绑定到0.0.0.0(又名INADDR_ANY,即所有本地IP)相同。

    一旦您可以访问Address 属性,您可以在激活服务器之前将其设置为您想要的任何IP,服务器将相应地绑定。

    例如:

    type
      TServerSocketAccess = class(TServerSocket)
      end;
    
    TServerSocketAccess(ServerSocket1).Address := '192.168.0.1';
    ServerSocket1.Active := True;
    

    【讨论】:

    • 非常感谢雷米。此代码成功更新服务器套接字地址值。但是,即使在地址属性明确设置为 IP 之后,服务器应用程序也会继续响应所有其他 IP 地址。你知道为什么吗?是 Delphi 套接字限制吗?
    • @LastManStanding 您所描述的情况仅当在服务器被激活时Address 为空白时才会发生。侦听套接字绑定到已设置的任何 IP,并且只能接受该 IP 上的连接。绑定到空白Address 允许在任何 IP 上进行连接。在将 Active 设置为 true 之前,您必须设置 Address
    猜你喜欢
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 2023-02-12
    相关资源
    最近更新 更多