TServerSocket
stellt die gewünschte Funktion nicht direkt zur Verfügung, ist jedoch mit einer kleinen Umgehungsmöglichkeit machbar. Sie müssen eine neue Klasse von TServerSocket
ableiten, um Zugriff auf die geschützte TAbstractSocket.Address
-Eigenschaft zu erhalten Das ist der Wert, den TServerSocket
bindet. Da die Eigenschaft normalerweise nicht zugänglich ist, bleibt sie eine leere Zeichenfolge, die mit der Bindung an 0.0.0.0
(alias INADDR_ANY
, dh alle lokalen IPs) identisch ist.
Sobald Sie auf die Eigenschaft Address
zugreifen können, können Sie vor dem Aktivieren des Servers die gewünschte IP-Adresse festlegen, und der Server wird entsprechend gebunden.
Zum Beispiel:
type
TServerSocketAccess = class(TServerSocket)
end;
TServerSocketAccess(ServerSocket1).Address := '192.168.0.1';
ServerSocket1.Active := True;
Vielen Dank Remy. Dieser Code aktualisiert erfolgreich den Server-Socket-Adresswert. Die Serveranwendung reagiert jedoch weiterhin auf alle anderen IP-Adressen, auch nachdem die Adresseigenschaft explizit auf eine IP festgelegt wurde. Hast du eine Ahnung warum? Ist es Delphi Socket-Beschränkung? – LastManStanding
@LastManStanding, was Sie beschreiben, kann passieren ** nur wenn ** die 'Adresse' zum Zeitpunkt der Serveraktivierung leer ist. Der abhörende Socket wird an die eingestellte IP-Adresse gebunden und kann nur Verbindungen auf dieser IP-Adresse akzeptieren. Die Bindung an eine leere Adresse erlaubt Verbindungen auf jeder IP-Adresse. Sie müssen "Adresse" einstellen, bevor Sie "Aktiv" auf "Wahr" setzen. –