Представьте себе следующую ситуацию с приложением удаленного доступа.
У меня есть два приложения «сервер-клиент» и одно приложение только для сервера (используется динамический DNS).
Когда я запускаю(1) Приложение «сервер-клиент», оно немедленно подключается к серверу и отображает его идентификатор / пароль / IP / порт в ListView, поэтому, когда я запускаю свое (2) приложение «сервер-клиент» и нажимаючерез каждый элемент ID / пароль / IP / порт на сервере ListView и приносит мне IP / порт относительно идентификатора / пароля.
Проблема заключается в том, что все эти приложения используют один и тот же внешний IP / порт, поэтомумое приложение не знает, к какому компьютеру подключаться.
Я уже разместил этот вопрос здесь, но в нем не было деталей, поэтому он был удален.Я публикую это снова, и я также предоставлю некоторый код.
Сначала я хотел, чтобы мне понадобилась служба DNS для каждого сервера-клиента, но это было слишком грязно и, вероятно, не помогло бы мне (ясобирался попытаться использовать компоненты IndyDNSServer и IndyDNSResolver).
После того, как я впервые разместил здесь мою проблему, пользователь сказал мне попробовать и использовать свойство TCustomWinSocket
Data
->
http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/ScktComp_TCustomWinSocket_Data.html
Но я ничего не мог с этим поделать.
//This block here passes the IP/Port configuration to the other
application socket (ClientS stands for ClientSocket[Number]).
ClientS2.Host := ClientS1.Host;
ClientS2.Port := ClientS1.Port;
ClientS3.Host := ClientS1.Host;
ClientS3.Port := ClientS1.Port;
ClientS4.Host := ClientS1.Host;
ClientS4.Port := ClientS1.Port;
ClientS5.Host := ClientS1.Host;
ClientS5.Port := ClientS1.Port;
ClientS6.Host := ClientS1.Host;
ClientS6.Port := ClientS1.Port;
MyFirstBmp := TMemoryStream.Create;
MySecondBmp := TMemoryStream.Create;
MyCompareBmp := TMemoryStream.Create;
PackStream := TMemoryStream.Create;
iSendCount := 0;
StatusBar1.Panels.Items[1].Text := 'Connected';
Timer2.Enabled := true;
BitBtn1.Enabled := false;
edtIPAddr.Enabled := false;
edtPort.Enabled := false;
edtPassword.Enabled := false;
edtName.Enabled := false;
frmCConectaNovaTela.bbtConecta.Enabled;
Sleep(1000);
Socket.SendText('<|MAIN|>'); // This text makes it so that the Main
thread on the server application be created.
Я пытаюсь найти способ подключения моего приложения кконкретный компьютер, который имеет тот же внешний IP-адрес, что и другие компьютеры в той же сети, которые также используют мое приложение и имеют те же порты прослушивания на своих серверных сокетах.
Одним словом, у меня было бы что-то вроде ...
CS1.Host := '188.156.124.111';
CS1.Port := '32500';
CS1.Property := 'ThirdParameterToMakeADistinctConnection';