Entwickler-Ecke

Internet / Netzwerk - OnClientRead welche Connection


Nokki - So 14.08.05 05:01
Titel: OnClientRead welche Connection
Hallo,

Wenn mehrer Clients zu einem Server verbunden sind, wie kann ich kann ich dann herausfinden von welcher "Connection" das OnClientRead ausgelöst wurde?

Hier erstmal mein Problem :

Wie gesagt sind mehrere Clients zu einem Server verbunden. Wenn bei einem Client die Daten in einer Tabelle hinzugefügt werden, schickt dieser die Daten an den Server mit client.Socket.sendBuf(srDaten,sizeof(srDaten));, wenn diese bei dem Server ankommen sind, speichert er diese in einer Datei und sendet dann die Daten als Record an die Clients. Auch an den Client wo hinzugefügt wurde. Wenn ich am Server die Daten mit
Server.Socket.ReceiveBuf(clDaten,sizeof(cldaten));entgegennehme, gibt es einen Fehler.Mit
Server.Socket.Connectrions[0].ReceiveBuf(clDaten,sizeof(cldaten));geht alles prima, aber nur wenn Daten in dem CLient hinzugefügt werden den ich als erstes verbunden habe. Bei den anderen Passiert einfach nix...

Danke für eure Hilfe

Moderiert von user profile iconraziel: Highlight- durch Delphi-Tags ersetzt.


retnyg - So 14.08.05 05:47

user profile iconNokki hat folgendes geschrieben:


Delphi-Quelltext
1:
Server.Socket.Connectrions[0].ReceiveBuf(clDaten,sizeof(cldaten));                    

rate mal für was die null steht...


Narses - So 14.08.05 10:44

Moin und :welcome: im Forum!

In dem Ereignis wird dir doch direkt der passende Socket-Parameter übergeben, nimm einfach den.

cu
Narses


Nokki - So 14.08.05 13:33

Wo wird denn da die Nummer der eigehenden Verbindung übergeben ? Das connections[0] die erste Verbindung ist, ist mir auch klar. Deswegen muss ich ja wissen, von welcher Verbindung aus der OnClientRead am Server ausgelöst wurde...


Narses - So 14.08.05 23:10

Moin!

Die Deklaration des TServerSocket.OnClientRead sieht doch so aus:

Delphi-Quelltext
1:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);                    

Das Markierte ist die Clientverbindung. Einfach damit z.B. Socket.SendText() oder sowas machen, fertig. Wenn du die Nummer der Connection im Server-Socket-Array haben willst, einfach Vergleichen und den Index merken.

cu
Narses


Nokki - So 14.08.05 23:29

Alles klar, jetzt hab ichs, danke !!


Marco D. - Do 01.09.05 17:23
Titel: Welche Connection
Tut mir leid aber ich habe immer noch nicht gecheckt wie man jetzt aus socket:tcustwomwinsocket den Index des Clients der gesendet hat rausbekommt :oops: . Könnt ihr das bitte nochmal genauer erklären? :?:


Narses - Do 01.09.05 17:43

Moin!

Guckst du hier [http://www.delphi-forum.de/topic_die+Clients+von+TServerSocket+auseinanderhalten_47183.html].

cu
Narses


Sinspin - Do 01.09.05 17:56

du hast doch alle clients die beim server gemeldet sind in der liste der connections des serversockets. wenn du nun daten von einem der clients über ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket) bekommst hast du eine verbindung aus der connection liste. nun brauchst du doch bloß alle connections mit deinem socket vergleichen


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var l:integer;
begin
  for l:=0 to Server.Socket.ActiveConnections-1 do
    if Server.Socket.Connections[l]<>socket then
    begin
      // mache was du willst mit allen außer dem der gesendet hat 
    end;
end;


Marco D. - Fr 02.09.05 15:11
Titel: Socket
Danke!

Hätt ich auch von selbst drauf kommen müssen :autsch::D: