Autor Beitrag
Jojojoxx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: Sa 07.01.06 19:43 
Hallo!

Ich habe ein Serverprogramm und ein Clientprogramm.
Wie muss eine erfolgreiche Abmeldung vom Server ablaufen, sodass auch socket.activeconnections den richtigen Wert enthält??
Weil das will bei mir nicht ganz funktionieren...
Worin genau liegt der Unterschied zwischen socket.close und socket.disconnect ??

Wenn ich vom Server die Verbindung duch Serversocket1.socket.connections[i].close schließen lasse, bliebt der Wert von
Serversocket1.socket.activeconnections unverändert und sinkt nicht um 1.
Danke euch!

mfg

Jojo


Moderiert von user profile iconraziel: Topic aus VCL (Visual Component Library) verschoben am Mo 09.01.2006 um 07:32


Zuletzt bearbeitet von Jojojoxx am Sa 07.01.06 19:54, insgesamt 1-mal bearbeitet
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Sa 07.01.06 19:53 
Ich vermute das funktioniert alles richtig, aber du wartest nicht ab, bis der Socket geschlossen worden ist sondern erwartest direkt nach einem Disconnect/Close das ActiveConnections den richtigen (aktualisierten) Wert enthält. Daher würde ich gerne mal den Codeausschnitt sehen wo du den Socket schliesst bis zu dem Codeausschnitt, wo du eine aktualisierte ActiveConnections Eigenschaft benötigst.

Und grundlegend sollte man TCustomWinSocket.Close aufrufen.

_________________
49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21
Jojojoxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: Sa 07.01.06 19:58 
Jep, du hast Recht!

Hab grad nen Timer auf 2 sek. gestellt und Serversocket1.socket.activeconnections überprüft und der Wert war korrekt.
Aber wann soll ich dann im Programm dies machen lassen? Ein Timer ist ja eine ziemlich schlechte Lösung.
Lässt sich irgendwie überprüfen, ob der Client disconnected und der Socket geschlossen ist?

mfg

Jojo
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Sa 07.01.06 20:05 
user profile iconJojojoxx hat folgendes geschrieben:
Aber wann soll ich dann im Programm dies machen lassen? Ein Timer ist ja eine ziemlich schlechte Lösung. Lässt sich irgendwie überprüfen, ob der Client disconnected und der Socket geschlossen ist?


Nach dem OnClientDisconnect Ereignis...

Was willst du überhaupt erreichen? Wenn du eine Liste mit Clients hast, dann füge Clients beim OnClientConnect in die Liste und lösche sie beim OnClientDisconnect. Dann hast du keine Probleme und brauchst ja ActiveConnections in dem Sinne überhaupt nicht mehr.

Also: was willst du grundlegend erreichen?

_________________
49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21
Jojojoxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: Sa 07.01.06 20:17 
Also.... IM OnClientDisconnect-Ereigniss passiert nichts, der Wert ist der alte.
Jetzt hast du aber ja geschrieben NACH dem OnClientDisconnect-Ereignis, was meinst du damit?
Danke für deine Hilfe!

mfg

Jojo
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: So 08.01.06 04:05 
Ich habe geschrieben, das nach dem OnClientDisconnect Ereignis der Wert stimmt. Also wenn das Ereignis komplett abgearbeitet ist und auch das Ereignis fertig ist.

Und da es nach dem OnClientDisconnect nicht nochmal ein Event gibt, fragte ich nach, was du eigentlich erreichen willst. Wenn du es wie ich es geschrieben hatte mit dem OnClientConnect eine Verbindung vermerkst und beim OnClientDisconnect eine Verbindung entfernst, sollte es keine Probleme geben. Daher nochmals die Frage: Was willst du grundlegend erreichen?

_________________
49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21
Jojojoxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: So 08.01.06 13:44 
Hi!

Ich will grundlegend erreichen, dass nach einem Disconnect eines Clients, alle anderen eine Nachricht erhalten.
Wenn ich aber ein Array anlege mit ID usw., dann müsste ich viel zu viel umprogrammieren.

mfg

Jojo
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 08.01.06 23:39 
Moin!

Du kriegst doch im OnClientDisconnect den Socket mitgegeben, der rausfällt; sende einfach an alle anderen, nur nicht an diesen. :wink:

cu
Narses
Jojojoxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: So 08.01.06 23:46 
Hi!

Wie bekomme ich den denn übergeben?? Wenn es so ist wie du sagst, wäre es die Lösung für mein Problem :D

mfg

Jojo
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 09.01.06 00:02 
Moin!

Schau dir doch mal den Prozedurkopf an... :roll: :wink:

cu
Narses
Jojojoxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: Mo 09.01.06 00:05 
Moin auch :lol: !

Hab ich vor meiner Antwort eben schon gemacht:

ausblenden Delphi-Quelltext
1:
2:
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);


Sehe da keine Variable, in der der Client stehen könnte :(

mfg

Jojo
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 09.01.06 00:16 
Moin!

Preisfrage (1 Gummipunkt): Von welchem Typ ist das .Connections[]-Array im ServerSocket? :D

cu
Narses
Jojojoxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: Mo 09.01.06 00:21 
Hi!

Würd ja gerne den Publikumsjoker nehmen, aber leider ist hier kein Publukum :D

Also,.. Der Wert, der übergeben werden muss, MUSS ja vom Typ Integer sein (richtig?)!
Aber wie greife ich darauf zu?!? :( Sorry, wenn ich mich grad was dumm anstelle, aber ich
finde die Lösung nicht! :?:

mfg

Jojo
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 09.01.06 00:31 
Moin!

OK, vielleicht war die Frage ja tatsächlich missverständlich gestellt, also nochmal:

Welchen Typ haben die Elemente im .Connections[]-Array (NICHT der Index, das ist ein Int, schon klar) des Server-Sockets?

cu
Narses
Jojojoxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: Mo 09.01.06 00:50 
Hi!

Ich steh völlig auf´m Schlauch :? ...

mfg

Jojo
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 09.01.06 00:54 
Moin!

OK, guckst du hier. :roll:

cu
Narses
Jojojoxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: Mo 09.01.06 01:02 
Ahhhh!!! :-)

Du meinst als, ich soll mit

ausblenden Delphi-Quelltext
1:
2:
3:
for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do
if Socket = ServerSocket1.Socket.Connections[i]
// usw...


überprüfen, wer der Client ist, der disconnected und dann allen außer diesem eine Nachricht senden!?

mfg

Jojo
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 09.01.06 01:12 
Moin!

Genau, und wenn du statt = noch <> nimmst, dann hast du den nötigen Code doch praktisch fertig. :wink:

Das war aber ein schwieriger Gummipunkt... :D

cu
Narses
Jojojoxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: Mo 09.01.06 01:21 
user profile iconNarses hat folgendes geschrieben:

Das war aber ein schwieriger Gummipunkt... :D

Aber immerhin hab ich ihn bekommen! :wink:
Vielen Dank für deine Geduld und Hilfe!! :D

mfg

Jojo