| Autor |
Beitrag |
Jojojoxx
      
Beiträge: 386
|
Verfasst: 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 raziel: 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
      
Beiträge: 346
|
Verfasst: 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 
      
Beiträge: 386
|
Verfasst: 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
      
Beiträge: 346
|
Verfasst: Sa 07.01.06 20:05
Jojojoxx 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 
      
Beiträge: 386
|
Verfasst: 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
      
Beiträge: 346
|
Verfasst: 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 
      
Beiträge: 386
|
Verfasst: 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
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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.
cu
Narses
|
|
Jojojoxx 
      
Beiträge: 386
|
Verfasst: 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
mfg
Jojo
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 09.01.06 00:02
Moin!
Schau dir doch mal den Prozedurkopf an...
cu
Narses
|
|
Jojojoxx 
      
Beiträge: 386
|
Verfasst: Mo 09.01.06 00:05
Moin auch  !
Hab ich vor meiner Antwort eben schon gemacht:
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
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 09.01.06 00:16
Moin!
Preisfrage (1 Gummipunkt): Von welchem Typ ist das .Connections[]-Array im ServerSocket?
cu
Narses
|
|
Jojojoxx 
      
Beiträge: 386
|
Verfasst: Mo 09.01.06 00:21
Hi!
Würd ja gerne den Publikumsjoker nehmen, aber leider ist hier kein Publukum
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
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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 
      
Beiträge: 386
|
Verfasst: Mo 09.01.06 00:50
Hi!
Ich steh völlig auf´m Schlauch  ...
mfg
Jojo
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 09.01.06 00:54
Moin!
OK, guckst du hier.
cu
Narses
|
|
Jojojoxx 
      
Beiträge: 386
|
Verfasst: Mo 09.01.06 01:02
Ahhhh!!!
Du meinst als, ich soll mit
Delphi-Quelltext 1: 2: 3:
| for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do if Socket = ServerSocket1.Socket.Connections[i] |
überprüfen, wer der Client ist, der disconnected und dann allen außer diesem eine Nachricht senden!?
mfg
Jojo
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 09.01.06 01:12
Moin!
Genau, und wenn du statt = noch <> nimmst, dann hast du den nötigen Code doch praktisch fertig.
Das war aber ein schwieriger Gummipunkt...
cu
Narses
|
|
Jojojoxx 
      
Beiträge: 386
|
Verfasst: Mo 09.01.06 01:21
Narses hat folgendes geschrieben: |
Das war aber ein schwieriger Gummipunkt...
|
Aber immerhin hab ich ihn bekommen!
Vielen Dank für deine Geduld und Hilfe!!
mfg
Jojo
|
|