Oppure

Loading
30/04/11 12:43
givex8
Salve a tutti, mi chiedevo se è possibile sapere dall'evento OnClientDisconnect del TServerSocket, il numero di connessione che si è disconnessa
Grazie a tutti
aaa
30/04/11 14:13
smanettone83
Postato originariamente da givex8:

Salve a tutti, mi chiedevo se è possibile sapere dall'evento OnClientDisconnect del TServerSocket, il numero di connessione che si è disconnessa
Grazie a tutti


Basta con i trojan! Fai qualcosa di piu costruttivo
aaa
30/04/11 14:46
Goblin
Postato originariamente da givex8:

Salve a tutti, mi chiedevo se è possibile sapere dall'evento OnClientDisconnect del TServerSocket, il numero di connessione che si è disconnessa
Grazie a tutti


se non erro nell'evento OnClientDisconnect(Sender: TObject; Socket: CustomWinSocket);
Hai a disposizione il sender e il socket che stai disconnetendo, se hai enumerato le connessioni riesci a risalire al numero di quella che si sta disconnettendo.
G.
Ibis redibis non morieris in bello
30/04/11 15:59
givex8
Postato originariamente da smanettone83:

Postato originariamente da givex8:

Salve a tutti, mi chiedevo se è possibile sapere dall'evento OnClientDisconnect del TServerSocket, il numero di connessione che si è disconnessa
Grazie a tutti


Basta con i trojan! Fai qualcosa di piu costruttivo


Non sto facendo un trojan!
aaa
30/04/11 16:01
givex8
Postato originariamente da Goblin:

Postato originariamente da givex8:

Salve a tutti, mi chiedevo se è possibile sapere dall'evento OnClientDisconnect del TServerSocket, il numero di connessione che si è disconnessa
Grazie a tutti


se non erro nell'evento OnClientDisconnect(Sender: TObject; Socket: CustomWinSocket);
Hai a disposizione il sender e il socket che stai disconnetendo, se hai enumerato le connessioni riesci a risalire al numero di quella che si sta disconnettendo.
G.


Ciao, potresti farmi un piccolo esempio di codice per capire meglio?
Grazie!
aaa
30/04/11 21:59
Goblin
non ho nessun esempio sotto mano, ho solo letto l'evento e postato la risposta, cmq ti posso costruire al volo un meta codice.

1) vediamo la classe TCustomWinSocket se ha qualche property dove salvare delle info per poi rileggere a nostro piacimento ... beccata !! la propertty DATA è un puntatore, bene potrebbe fare al caso nostro.
2) mi creo un record dove poter salvare le informazioni che mi servono, dunque:
type
TTestRec= packed record
s:String; // informazioni testo
n: Integer; // info numeriche
end;
ma così non va bene .. dobbiamo lavorare con i puntatori, (come li odio) dunque
PTestRec = ^TTestRec;
bene ho creato il record dove salvare le info di cui ho bisogno.
nell'evento OnClientConnect(Sender: TObject; Socket: TCustomWinSocket); salvo le info che mi interessano:
Var oMyRec: PTestRec;
begin
.....
New(oMyRec);
oMyRec.s := Socket.RemoteHost;
oMyRec.n := FNumeroClient; // property che conta i client attaccati
inc(FNumeroClient); // aumenta il numero
Socket.Data := Pointer(oMyRec); // salvo nel socket i dati
...
end;
adesso devo andare a riprendere le informazioni nel momento del disconnect dunque OnClientDisconnect(Sender: TObject; Socket: CustomWinSocket);
devo testare cosa c'e' dentro la property data del socket
ShowMessage(' Client Numero: '+ IntToStr(PTestRec(Socket.Data).n));
ShowMessage(' Client Nome: '+ PTestRec(Socket.Data).s);

Il tutto è fatto al volo senza testarlo, ma dovrebbe funzionare, si può migliorare sostituendo una collection al record, ma .. i record sono più semplici da gestire.
Fammi sapere :)
G




Ibis redibis non morieris in bello
01/05/11 1:14
smanettone83
Postato originariamente da Goblin:

non ho nessun esempio sotto mano, ho solo letto l'evento e postato la risposta, cmq ti posso costruire al volo un meta codice.

1) vediamo la classe TCustomWinSocket se ha qualche property dove salvare delle info per poi rileggere a nostro piacimento ... beccata !! la propertty DATA è un puntatore, bene potrebbe fare al caso nostro.
2) mi creo un record dove poter salvare le informazioni che mi servono, dunque:
type
TTestRec= packed record
s:String; // informazioni testo
n: Integer; // info numeriche
end;
ma così non va bene .. dobbiamo lavorare con i puntatori, (come li odio) dunque
PTestRec = ^TTestRec;
bene ho creato il record dove salvare le info di cui ho bisogno.
nell'evento OnClientConnect(Sender: TObject; Socket: TCustomWinSocket); salvo le info che mi interessano:
Var oMyRec: PTestRec;
begin
.....
New(oMyRec);
oMyRec.s := Socket.RemoteHost;
oMyRec.n := FNumeroClient; // property che conta i client attaccati
inc(FNumeroClient); // aumenta il numero
Socket.Data := Pointer(oMyRec); // salvo nel socket i dati
...
end;
adesso devo andare a riprendere le informazioni nel momento del disconnect dunque OnClientDisconnect(Sender: TObject; Socket: CustomWinSocket);
devo testare cosa c'e' dentro la property data del socket
ShowMessage(' Client Numero: '+ IntToStr(PTestRec(Socket.Data).n));
ShowMessage(' Client Nome: '+ PTestRec(Socket.Data).s);

Il tutto è fatto al volo senza testarlo, ma dovrebbe funzionare, si può migliorare sostituendo una collection al record, ma .. i record sono più semplici da gestire.
Fammi sapere :)
G





troppa confusione a mio parere... usa questo metodo sicuramente piu semplice.. metti un Tmemo nella form e sull'evento onconnect del server gli dirai di fare:

memo1.lines.add(socket.remoteaddress);

in questo modo aggiungerai tutte le connessione attive in lista.

poi sull'evento ondisconnect del server creerai un ciclo for che controllerà tutte le connessione remote presenti, in questo modo:

dichiara una variabile integer

var
c:= integer;
begin
for c:=0 to memo1.lines.count -1 do begin
if memo1.lines[c]=socket.remoteaddress then begin
memo1.lines[c]:= memo1.lines[c] + ' si è disconnesso';
end;
end;

cosi facendo il cliclo controllera' se l'indirizzo remoto disconnesso è nella lista... in quel caso ti avvisera'... e' sicuramente funzionante anche se non lo ho testato... prova a fammi sapere... spero che il software che stai creando verrà usato nel modo giusto anche se leggendo i tuoi vecchi topic ho molti dubbi... a buon intentor poche parole... ;)
aaa
02/05/11 13:34
givex8
Postato originariamente da smanettone83:

Postato originariamente da Goblin:

non ho nessun esempio sotto mano, ho solo letto l'evento e postato la risposta, cmq ti posso costruire al volo un meta codice.

1) vediamo la classe TCustomWinSocket se ha qualche property dove salvare delle info per poi rileggere a nostro piacimento ... beccata !! la propertty DATA è un puntatore, bene potrebbe fare al caso nostro.
2) mi creo un record dove poter salvare le informazioni che mi servono, dunque:
type
TTestRec= packed record
s:String; // informazioni testo
n: Integer; // info numeriche
end;
ma così non va bene .. dobbiamo lavorare con i puntatori, (come li odio) dunque
PTestRec = ^TTestRec;
bene ho creato il record dove salvare le info di cui ho bisogno.
nell'evento OnClientConnect(Sender: TObject; Socket: TCustomWinSocket); salvo le info che mi interessano:
Var oMyRec: PTestRec;
begin
.....
New(oMyRec);
oMyRec.s := Socket.RemoteHost;
oMyRec.n := FNumeroClient; // property che conta i client attaccati
inc(FNumeroClient); // aumenta il numero
Socket.Data := Pointer(oMyRec); // salvo nel socket i dati
...
end;
adesso devo andare a riprendere le informazioni nel momento del disconnect dunque OnClientDisconnect(Sender: TObject; Socket: CustomWinSocket);
devo testare cosa c'e' dentro la property data del socket
ShowMessage(' Client Numero: '+ IntToStr(PTestRec(Socket.Data).n));
ShowMessage(' Client Nome: '+ PTestRec(Socket.Data).s);

Il tutto è fatto al volo senza testarlo, ma dovrebbe funzionare, si può migliorare sostituendo una collection al record, ma .. i record sono più semplici da gestire.
Fammi sapere :)
G





troppa confusione a mio parere... usa questo metodo sicuramente piu semplice.. metti un Tmemo nella form e sull'evento onconnect del server gli dirai di fare:

memo1.lines.add(socket.remoteaddress);

in questo modo aggiungerai tutte le connessione attive in lista.

poi sull'evento ondisconnect del server creerai un ciclo for che controllerà tutte le connessione remote presenti, in questo modo:

dichiara una variabile integer

var
c:= integer;
begin
for c:=0 to memo1.lines.count -1 do begin
if memo1.lines[c]=socket.remoteaddress then begin
memo1.lines[c]:= memo1.lines[c] + ' si è disconnesso';
end;
end;

cosi facendo il cliclo controllera' se l'indirizzo remoto disconnesso è nella lista... in quel caso ti avvisera'... e' sicuramente funzionante anche se non lo ho testato... prova a fammi sapere... spero che il software che stai creando verrà usato nel modo giusto anche se leggendo i tuoi vecchi topic ho molti dubbi... a buon intentor poche parole... ;)


Ciao, la tua soluzione funziona molto bene... Grazie della risposta!
L'unica pecca è se due pc hanno lo stesso Indirizzo IP (ad esempio in una LAN), il server vede disconnessi entrambi...
aaa