Ничто не мешает вам сделать это с компонентом Indy TIdTCPServer.
TIdTCPServer только устанавливает соединение.Вам нужно будет реализовать все остальное.Таким образом, последовательность фактической отправки и получения может быть любой, что вы хотите.
Поместите этот код в событие OnExecute вашего компонента TIdTCPServer:
var
sName: String;
begin
// Send command to client immediately after connection
AContext.Connection.Socket.WriteLn('What is your name?');
// Receive response from client
sName := AContext.Connection.Socket.ReadLn;
// Send a response to the client
AContext.Connection.Socket.WriteLn('Hello, ' + sName + '.');
AContext.Connection.Socket.WriteLn('Would you like to play a game?');
// We're done with our session
AContext.Connection.Disconnect;
end;
Вот как вы действительно можете просто настроить TIdTCPServer:
IdTCPServer1.Bindings.Clear;
IdTCPServer1.Bindings.Add.SetBinding('127.0.0.1', 8080);
IdTCPServer1.Active := True;
Это говорит серверу прослушивать только адрес обратной связи, через порт 8080. Это предотвращает подключение к нему всех, кто находится за пределами вашего компьютера.
Затем, чтобы подключить ваш клиент,Вы можете перейти в командную строку Windows и ввести следующее:
telnet 127.0.0.1 8080
Вот вывод:
Как вас зовут?
Маркус
Здравствуйте, Маркус.
Хотите поиграть в игру?
Соединение с хостом потеряно.
Неесть телнет?Вот как установить клиент telnet в Vista и 7 .
Или с клиентом TIdTCP вы можете сделать это:
var
sPrompt: String;
sResponse: String;
begin
// Set port to connect to
IdTCPClient1.Port := 8080;
// Set host to connect to
IdTCPClient1.Host := '127.0.0.1';
// Now actually connect
IdTCPClient1.Connect;
// Read the prompt text from the server
sPrompt := IdTCPClient1.Socket.ReadLn;
// Show it to the user and ask the user to respond
sResponse := InputBox('Prompt', sPrompt, '');
// Send user's response back to server
IdTCPClient1.Socket.WriteLn(sResponse);
// Show the user the server's final message
ShowMessage(IdTCPClient1.Socket.AllData);
end;
Здесь важно отметить следующее:что операторы ReadLn ждут, пока не появятся данные.В этом вся магия.