2016-10-17 79 views

回答

5

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; 
+0

非常感谢雷米。此代码正在成功更新服务器套接字地址值。但是,即使在将地址属性明确设置为IP后,服务器应用程序仍会对所有其他IP地址做出响应。你有什么想法,为什么?是德尔福套接字限制吗? – LastManStanding

+0

@LastMan只有当**服务器被激活时的地址为空时,才会发生**。监听套接字被绑定到任何已设置的IP上,并且只能接受该IP上的连接。绑定到一个空白的“地址”允许任何IP上的连接。在设置“Active”为true之前,您必须设置“Address”。 –

相关问题