2016-10-17 2 views

Antwort

5

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

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

+0

@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. –

Verwandte Themen