PDA

Visualizza la versione completa : [DELPHI] Client/server per trasferimento stringhe via TCP


fabiorapy
27-03-2009, 16:56
Ciao a tutti...mi sono appena inscritto al forum e ho visto che ci sono persone davvero molto preparate e competenti...
sto facendo un applicazione client - server in delphi 7 usando i componenti di indy 10 per scambiare stringhe. ho trovato gia dei programmi in rete, il server e il client si connettono,come faccio a scambiare stringhe?ho provato a usare SendCmd sull'onWork del client e readlln sull onExcute del server, ma nn riesco a mandare niente...qualcuno mi diceva ke devo impostare l'IOhandler...scusate la mia superignoranza in materia...ma sono con l'acqua alla gola e se qualcuno potesse "assistermi",magari qualcuno ke ha gia lavorato con cose del genere mi salverebbe davvero la vità..in questo momento sono così..=> :dhò: ....grazie x l'attenzione

denis76
27-03-2009, 22:17
Se si tratta di una cosa semplice a livello dimostrativo puoi aprire un socket mediante il componente IdTCPServer al quale ti connetterai con il componente IdTCPClient.
Per mandare la riga, una volta che userai IdTCPClient.IOHandler.WriteLn('quellochevuoi'). Lato server verrà attivato un evento OnRead (oppure OnExecute, non mi ricordo più).
Se però devi fare un programma molto articolato non usare Indy lato server, il componente IdTCPServer è pessimo. Usa ICS oppure Synapse.

fabiorapy
28-03-2009, 10:36
:) :) grazie mille per l'interessamento....per quello ke devo fare io va bene il TCPServer...
scusa ancora se approfitto della tua conoscenza....io ho messo sampleclient.IOHandler.WriteLn(m);
dove m è la stringa ke voglio mandare all'interno dell'evento onWork...ma mettendo un breakpoint vedo ke nn va mai in questo evento...devo kiamarlo da un altra procedure?
poi ti volevo kiedere un'altra cosa...se si disconnette il server quando il client è ancora connesso succede un casino...c'è un modo per gestire la cosa senza dover riavviare l'eseguibile?
ancora grazie....

denis76
28-03-2009, 12:37
Quello è uno dei punti critici del componente IdTCPServer. Comunque mi sembra che l'evento che viene generato quando c'è qualcosa da leggere sia OnExecute

fabiorapy
28-03-2009, 16:42
io ssu onexcute ho messo questo codice..

procedure TfrmMain.ServerExecute(AContext: TIdContext);
var
LLine: string;
LCmd: string;
begin

with AContext.Connection.IOHandler do try
LLine := ReadLn;
LCmd := Fetch(LLine);
edit1.Text := LLine;
finally WriteBufferClose; end;

end;

l'ho estrapolato da un esempio trovato in rete...

così come ho inserio nella parte client questo codice

procedure TfrmMain.SampleClientWork(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
var
m,s : string;
begin
m := edit1.text;
sampleclient.IOHandler.WriteLn(m);
edit1.Text :='stringa mandata';
end;


xò nn va mai in questo evento....cosa sto sbagliando?nn credo sia una cosa pazesca da fare,questo demo ke ho trovato connette il o i client al server...e con una specie di conto alla rovescia li disconnette..e li riconnette ancora...io ne voglio connettere solo uno...e voglio scambiare stringhe....se vuoi ti posto il codice di client e server....

nn ti ringrazierò mai abbastanza... :)

Loading