AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Serversocket wie Clients Unterscheiden ?

Ein Thema von Real_Thunder · begonnen am 13. Mai 2006 · letzter Beitrag vom 17. Mai 2006
Antwort Antwort
Seite 2 von 2     12   
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#11

Re: Serversocket wie Clients Unterscheiden ?

  Alt 15. Mai 2006, 10:37
Ich möchte anhand des
Integer(Socket) eine Verbindung aufbauen können, ohne vorher mit einer schleife die werte zu vergleichen.

also ich meie quasi dieses:
Delphi-Quellcode:
for y:=0 to serversocket1.Socket.ActiveConnections-1 do begin
  if inttostr(integer(serversocket1.Socket.Connections[y]))= find_client[0] then begin
    serversocket1.socket.Connections[y].SendText('Testtext'');
end;
end;
durch nur einen befehl ersetzten

Hmmm.. So has ich angand der Socket id , die Passene Verbindugg raussuchen kann
  Mit Zitat antworten Zitat
Benutzerbild von Net7
Net7

Registriert seit: 22. Jun 2004
Ort: Lauenburg
161 Beiträge
 
Delphi 7 Professional
 
#12

Re: Serversocket wie Clients Unterscheiden ?

  Alt 16. Mai 2006, 10:08
Schreib dir doch eine Funktion.
Marko
So`ne Atombombe kann einem den ganzen Tag verderben!
Eine eigene DLL in C++ geschrieben wird meist ein Sklave für mein Delphi/Pascal.
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#13

Re: Serversocket wie Clients Unterscheiden ?

  Alt 17. Mai 2006, 01:02
Jups werde ich machen, so spare ich mir wneigstens ein wenig source code...
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#14

Re: Serversocket wie Clients Unterscheiden ?

  Alt 17. Mai 2006, 07:15
Wozu? Gelesen was ich geschrieben hatte? Man kann mit dem Integer sich eine eindeutige ID zusammenbauen - oder am besten einfach das ganze als TCustomWinSocket lassen, da die Instanz wie gesagt schon eindeutig ist. Somit ersetze den Integer in deiner Clientverwaltung durch TCustomWinSocket und leg direkt ohne Type-Cast den Socket darin ab.

Der Integer beinhaltet die Instanzenadresse, somit ist er eindeutig - aber warum den Typ noch auf Integer umschreiben wenn er als Socket doch viel nützlicher ist?

Ansonsten nach deinem bisherigen Aufbau würdes du dir die Schleife ersparen können, da du den richtigen Socket in deiner Struktur vorliegen hast. Folgender Code ersetzt deine komplette Schleife:

TCustomWinSocket(find_client[0]).SendText('Wozu eine Funktion?'); /EDIT: PS: Was ich gerade sehe: warum legst du den Socket bzw. die Socket ID als String ab??? Warum nur? Somit ändert sich der Code noch weiter:

TCustomWinSocket(StrToInt(find_client[0])).SendText('Viel zu kompliziert gemacht (die Clientverwaltung).'); Einen Integer zu vergleichen wäre deutlich schneller, komfortabler und fehlerfester.
  Mit Zitat antworten Zitat
Benutzerbild von Net7
Net7

Registriert seit: 22. Jun 2004
Ort: Lauenburg
161 Beiträge
 
Delphi 7 Professional
 
#15

Re: Serversocket wie Clients Unterscheiden ?

  Alt 17. Mai 2006, 08:32
Ähm.. also nun frag ich mich ernsthaft was an meiner Lösung ( weiter oben )so umsändlich sein soll.


Delphi-Quellcode:

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
        TNet7Server.ClientOnList;
end;
ich muss meine Procedure nur dort reinbasteln und schon hab ich was ich brauche die Handlenummer und die dazugehörige die Verbindung. Alles steht im Record.
Ist doch viel Eleganter als sich mit den TCustomWinSocket noch auseinanderzusetzen.

Mfg Net7
Marko
So`ne Atombombe kann einem den ganzen Tag verderben!
Eine eigene DLL in C++ geschrieben wird meist ein Sklave für mein Delphi/Pascal.
  Mit Zitat antworten Zitat
Real_Thunder

Registriert seit: 25. Apr 2006
197 Beiträge
 
#16

Re: Serversocket wie Clients Unterscheiden ?

  Alt 17. Mai 2006, 08:42
Nichts gegen deine Lösung, die scheint ja auch recht kompfortabel zu sein.

Doch ich bin im allgemeinen noch nicht so bewandert in Delphi, benutze es erst seit 2 Wochen

Mit der Records und der Zuordnung zu der Connection verstehe ich die Logik nicht ganz.
Es mag Funktionieren, aber wenn ich nicht verstehe Wie es Funktioniert dann benutze ich es lieber nicht.
Sobald ich mich mit dem Kram auseinandergesetzt habe, und es verstehe wede ich mir die anderen vorschläge noch mal anschauen.

MfG Real Thunder
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#17

Re: Serversocket wie Clients Unterscheiden ?

  Alt 17. Mai 2006, 13:41
Zitat von Net7:
Ähm.. also nun frag ich mich ernsthaft was an meiner Lösung ( weiter oben )so umsändlich sein soll.
Ich bezog mich auf Real_Thunder, aber ich kann auch gerne zu deiner Lösung nochmal noch ein paar Aussagen treffen:

1. Durch MaxAnzCon ist deine Logik/Verwaltung auf 100 Clients begrenzt und nicht dynamisch erweiterbar.
2. Warum, besser, wofür merkst du dir das Sockethandle? Wozu brauchst du dieses in der Clientverwaltung da du doch alles mit den Instanzen der TCustomWinSockets erledigst (bzw. deren Methoden)
3. Was nützt dir ein "Online" Flag, wenn es doch einfach festzustellen geht: Wenn ein Socket vorhanden ist, ist er online, ist er nicht mehr vorhanden, dann ist er offline. Egal ob nun im Connections[] Array des Server Sockets oder sonstwo vermerkt.
4. Deine Eigenschaft "Con" ist nicht eindeutig, sie kann mehrfach vergeben werden bzw. wird mehrfach vergeben. Wozu brauchst du diese dann? Wozu dient diese Eigenschaft?

Vor allem frage ich mich, was dir diese Verwaltung bringt? Im Normallfall ist das Problem doch die Zuordnung von zusätzlichen Daten den Sockets und nicht zu wissen welche Sockets zZ am Server hängen. Letzteres kann man einfach und sofort durch Iteration der Connections[] Eigenschaft ermitteln.

Wenn ich zusätzliche Informationen verwalten will (ist der Client authentifiziert, welcher Client (z.B. Name) ist das, etc), dann würde ich eine Klasse erstellen welche in einer TObjectList verwaltet wird. Diese Klasse bekommt eine Eigenschaft oder öffentliche Variable vom Typ TCustomWinSocket und lebt genauso lange wie der Socket zu der sie gehört. Alle zusätzlichen Informationen die ich zu den Clients verwalten will bzw. speichern will, werden darin vermerkt. Beim Connect wird die Instanz der Klasse erstellt, der Objectlist zugefügt und der Eigenschaft Data des Sockets. Die Instanz bekommt auch den Socket zugewiesen auf die Eigenschaft.

Folgende zwei Beispielfälle:
- Ein Client disconnected: ok, ich hole mir die Instanz aus der Data Eigenschaft des Sockets, entferne diese aus der Objektliste und gebe sie frei (wenn nicht schon von der TObjectList abhängig von OwnsObject schon getan).

- Ich will eine Nachricht an alle authentifizierten Clients schicken: Ich laufe über alle Elemente der Objektliste und für jedes Element welches authentifiziert ist, sende ich eine Nachricht direkt durch Aufruf der SendText() Methode der vermerkten Socket Instanz - ohne vorher das Connections[] Array für jedes Element abzuklappern.

Ich für meinen Teil würde das dann noch weiter spinnen und keine TObjectList nutzen sondern eine Ableitung von dieser implementieren, welche dadurch besondere Methoden bekommen kann. So z.B. eine Methode der Liste für SendToAll(), etc.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz