AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi String an alle Socket-Connections senden???
Thema durchsuchen
Ansicht
Themen-Optionen

String an alle Socket-Connections senden???

Ein Thema von romber · begonnen am 2. Feb 2005 · letzter Beitrag vom 2. Feb 2005
Antwort Antwort
Seite 1 von 2  1 2      
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#1

String an alle Socket-Connections senden???

  Alt 2. Feb 2005, 04:31
Hallo!

Für jede neue Verbindung zum ServerSocket (stThreadBloking) wird einen neuen TServerClientThread erstellt.
Gleich zwei Fragen:

1. Wie kann ich einen String an alle Connections senden?
1. Wie kann ich einen String an eine bestimmte Connection senden?

Danke!

MfG,
Ralfi
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

Re: String an alle Socket-Connections senden???

  Alt 2. Feb 2005, 08:04
Zitat von Stevie:
Außerdem verfügt ein Socket über eine Property, die Data heißt.
Dies ist ein Pointer. Dort kannst du ein beliebiges Objekt anhängen,
zum Beispiel die Anmeldedaten deines Clients, die er beim Connecten
übersenden muss. Wenn du an einen bestimmten Client etwas senden willst,
dann suchst du in deiner Socket-Liste nach dem richtigen Element.
SuchObjekt ist jetzt das Objekt, welches an dem Socket hängt, welchem du etwas schicken willst.
Dazu musst also für jeden Socket ein Objekt haben, wo du Informationen über den Client
speicherst. Du kannst auch an dieses Objekt den Socket hängen (halt andersrum als ich oben
erklärt habe). Dann kannst du über die ObjektListe laufen, etwa so:
Delphi-Quellcode:
for i:=0 to Pred(BenutzerListe.Count) do
  if TBenutzer(BenutzerListe[i]).Nickname = 'Steviethen
    TBenutzer(BenutzerListe[i]).Socket.SendText('Hallo Stevie!');
Dazu musst du beim Anmelden des Benutzers ein TBenutzer-Objekt anlegen, es in die Liste
einfügen und die Eigenschaften setzen. Beim Abmelden muss es aus der Liste wieder entfernt werden.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: String an alle Socket-Connections senden???

  Alt 2. Feb 2005, 11:15
Ja, aber wie speichere ich den Socket in einer Liste? Ich habe schon versucht, den Socket-Pointer im Data-Eingenschaft eines TListItems zu speichern. Ich habe damals für jede Verbindung einen ListView-Items erstellt, in dem ich spezifische Verbindungsinformationen darstellte. Etwa so:

Code:
...
type
  ServerClientThread = class(TServerClientThread)
  constructor Create(CreateSuspended: Boolean; ASocket: TServerClientWinSocket; ItemX: TListItem);
  private
    { Private declarations }
  protected
    Line: string;
    Item: TListItem;
  procedure ClientExecute; override;
  procedure AddItem;
  procedure DeleteItem;
end;
...

...
constructor ServerClientThread.Create(CreateSuspended: Boolean; ASocket: TServerClientWinSocket;
ItemX: TListItem);
begin
inherited Create(CreateSuspended, ASocket);
Item := ItemX
end;
...
Beim Erstellen eines Verbinungsthreads erstelle ich einen TListItem und gebe diesen an den Thread weiter:

Code:
...
procedure TForm1.ServerSOcket1GetThread(Sender: TObject; ClientSocket: TServerClientWinSocket; var SocketThread: TServerClientThread);
var
Item: TlistItem;
begin
  Item := ListView1.Items.Add;
  SocketThread := ServerClientThread.Create(true, ClientSocket, Item);
  Item.Data := Pointer(SocketThread);
  SocketThread.Resume
end;
...
Der Thread ergänzt dann den Item mit empfangenen Identifikationsdaten des Clients.

Wenn ich dann an einen bestimmten Client etwas senden möchte:

Code:
...
var
Item: TLietItem;
begin
Item := ListView1.ItemFocused;
if assigned(Item.Data) then
TServerClientThread(Item.Data).ClientSocket.SendText('irgendein Text')
end;
...
oder an alle Clients:

Code:
...
var
i: integer;
begin
 for i := 0 to ListView1.Items.Count - 1 do
 begin
   if assigned(ListView1.Items.Item[i].Data) then
   TServerClientSocket(ListView1.Items.Item[i].Data).ClientSocket.SendText('irgendein Text')
 end;
end;
...
Zumindest ich habe es mir so vorgestellt. Die obige Code fuktioniert aber nicht. Die Threads werden normal erstellt, Item wird hinzufügt, alles wunderbar - bis auf Senden von Informationen. Sobald ich etwas wie oben beschrieben senden möchte, hängt sich der Server auf.

Was den nun? Hat jemand einen Code-Beispiel? Wäre sehr dankbar!

MfG,
Ralfi
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

Re: String an alle Socket-Connections senden???

  Alt 2. Feb 2005, 11:19
Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
  SocketList.Add(Socket);
end;
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#5

Re: String an alle Socket-Connections senden???

  Alt 2. Feb 2005, 11:41
Und was ist dann diese SocketList?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

Re: String an alle Socket-Connections senden???

  Alt 2. Feb 2005, 11:46
Ein stinknormales TList-Object!
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#7

Re: String an alle Socket-Connections senden???

  Alt 2. Feb 2005, 11:54
OK, du meinst vielleicht, ich soll eine SocketHandle in einer Liste speichern. Wie kann ich dann eine Nachricht an einen bestimmten Client senden, wenn ich die SocketHandle des Client kenne?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

Re: String an alle Socket-Connections senden???

  Alt 2. Feb 2005, 11:58
Delphi-Referenz durchsuchenTCustomWinSocket.SendText
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#9

Re: String an alle Socket-Connections senden???

  Alt 2. Feb 2005, 12:09
Wie ich das sende, das weiß ich! Wo, verdammt, stecke ich beim senden den SocketHandle rein - das verstehe ich nicht! Könntest du vielleicht so nett sein und code für Senden-Vorgang posten? Denn das kann so ohne Ende weitergehen. Angenommen, ich habe den SocketHandle eines Clients. Ich möchte Ihm eine Nachricht senden. Die Code

Code:
TCustomWinSocket(hier den SocketHandle).SendText(blablabla)
wird sicher nicht funktionieren, oder?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

Re: String an alle Socket-Connections senden???

  Alt 2. Feb 2005, 12:42
SocketHandle ist was anderes...

Delphi-Quellcode:
for i:=0 to Pred(SocketList.Count) do
  if SocketList[i].Data = SuchObjekt then
    TCustomWinSocket(SocketList[i]).SendText(Blabla);
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:31 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