2016-10-17 5 views
1

Кто-нибудь знает какой-либо способ привязать компонент Delphi TServerSocket для приема запросов только по определенному локальному адресу?Как привязать TServerSocket к определенному IP-адресу

Сервер имеет несколько IP-адресов, но требуется, чтобы серверное приложение принимало запросы на одном IP-адресе только при его запуске.

ответ

5

TServerSocket не напрямую раскрывает функцию, о которой вы просите, однако это можно сделать с небольшим обходным решением.

Чтобы получить доступ к охраняемому объекту TAbstractSocket.Address, вам необходимо получить новый класс от TServerSocket. Это значение, которое привязывается к TServerSocket. Поскольку свойство обычно не доступно, оно остается пустой строкой, которая совпадает с привязкой к 0.0.0.0 (aka INADDR_ANY, то есть ко всем локальным IP-адресам).

Как только вы сможете получить доступ к свойству Address, вы можете установить его на любой IP-адрес, который вы хотите до активации сервера, и сервер будет привязываться соответствующим образом.

Например:

type 
    TServerSocketAccess = class(TServerSocket) 
    end; 

TServerSocketAccess(ServerSocket1).Address := '192.168.0.1'; 
ServerSocket1.Active := True; 
+0

спасибо Реми. Этот код успешно обновляет значение адреса сервера. Однако серверное приложение продолжает отвечать на все другие IP-адреса даже после того, как свойство address явно установлено на IP. Вы знаете, почему? Это ограничение на Delphi? – LastManStanding

+0

@ LastManStanding то, что вы описываете, может случиться ** только когда ** «Адрес» пуст во время активации сервера. Слуховой сокет привязан к любому IP-адресу и может принимать только соединения на этом IP-адресе. Привязка к пустому «Адресу» позволяет подключать любые IP-адреса. Вы должны установить «Адрес», прежде чем устанавливать значение «Актив» на true. –

Смежные вопросы