Non c'è nulla che ti impedisce di farlo con il componente TIdTCPServer di Indy.
Un TIdTCPServer imposta solo la connessione. Dovrai implementare il resto. Quindi la sequenza di invio e ricezione effettivi può essere qualsiasi cosa tu voglia.
inserire questo codice nell'evento OnExecute del componente 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;
Ecco come è possibile impostare la TIdTCPServer davvero semplice:
IdTCPServer1.Bindings.Clear;
IdTCPServer1.Bindings.Add.SetBinding('127.0.0.1', 8080);
IdTCPServer1.Active := True;
Questo indica al server per l'ascolto solo sull'indirizzo di loopback, alla porta 8080. Ciò impedisce a chiunque al di fuori del computer di connettersi ad esso.
Poi, per collegare il cliente, si può andare a un prompt dei comandi di Windows e digitare quanto segue:
telnet 127.0.0.1 8080
ecco l'output:
Qual è il tuo nome?
Marcus
Ciao, Marco.
Ti piacerebbe giocare?
Connessione all'host perso.
Non hai telnet? Ecco come fare per install telnet client on Vista and 7.
o con un client TIdTCP, si può fare questo:
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;
Una cosa importante da notare qui è che le dichiarazioni readLn aspettare fino a quando non ci sono dati. Questa è la magia dietro a tutto.
Forse è possibile simulare questo comportamento con i metodi 'IdTCPClient1.IOHandler.ReadLnWait' o' IdTCPClient1.IOHandler.WaitFor'. Altrimenti, usare 'TIdCmdTCPCLient' potrebbe risolvere il tuo problema. – LightBulb
Quale versione di Indy? –
Attualmente, sto usando Indy 10 in Delphi 2010. – LightBulb