如何将TServerSocket绑定到特定的IP地址
问题描述:
有没有人知道任何方式来绑定Delphi TServerSocket组件来接受仅在特定本地地址上的请求?如何将TServerSocket绑定到特定的IP地址
服务器有几个IP,但它要求服务器应用程序仅在其运行时接受一个IP上的请求。
答
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地址做出响应。你有什么想法,为什么?是德尔福套接字限制吗? – LastManStanding
@LastMan只有当**服务器被激活时的地址为空时,才会发生**。监听套接字被绑定到任何已设置的IP上,并且只能接受该IP上的连接。绑定到一个空白的“地址”允许任何IP上的连接。在设置“Active”为true之前,您必须设置“Address”。 –