AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Dateien schicken über Tserver/Tclient
Thema durchsuchen
Ansicht
Themen-Optionen

Dateien schicken über Tserver/Tclient

Ein Thema von vsilverlord · begonnen am 15. Sep 2008 · letzter Beitrag vom 13. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von vsilverlord
vsilverlord

Registriert seit: 7. Jan 2008
Ort: Baden Württemberg- Hohenlohekreis
174 Beiträge
 
RAD-Studio 2009 Arc
 
#1

Dateien schicken über Tserver/Tclient

  Alt 15. Sep 2008, 09:48
Hallo, ich möchte Informationen senden. Das mit receivetext hat schon funktioniert, daber das mit reveivebuf funktioniert nicht.
Ich habe eine einen eigenen Type, der jeweils im Serverprogramm und im clientprogramm deklariert ist:
Delphi-Quellcode:
Type
Taktion=(Texte,Setzen, Drop);
TInformation = record
Aktion: Taktion;
Kommentar: string;
end;
Erstmal will ich nur Textnachrichten senden können, und zwar per Button:
Delphi-Quellcode:
var
information:tinformation;
begin
information.Aktion:=texte;
information.Kommentar:=edit1.text;
clientsocket1.Socket.SendBuf(information,sizeof(information))
end
im server wird dann gelesen und an alle geschickt:
Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
  var
    i: Integer;
    information:tinformation;
begin
  // Nachricht lesen
  socket.ReceiveBuf(Information,sizeof(information));
  if Information.Aktion=Texte then
  begin
  Log.Lines.Add(Information.Kommentar); // Nachricht lokal ausgeben
  // und an alle verbundenen Clients senden
  for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
  begin
    serversocket1.Socket.Connections[i].SendBuf(Information,sizeof(information))
  end
   end
end;
im client wiederum wird das dann wieder ausgegeben:
Delphi-Quellcode:
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var
information:Tinformation;
begin
  socket.ReceiveBuf(information,SizeOf(information));
  if information.Aktion=texte then
  log.Lines.Add(information.Kommentar)
end;
Nur leider kommt ein grober böser hässlicher Fehler, und zwar in der Server.exe
Theoretisch könnte ich die Informationen auch über sendtext machen, aber da ich da nur strings senden kann, ist das ziemlich quälend.
Volker
~beware
Wizards First Rule:
People are stupid; given proper motivation, almost anyone will believe almost anything. Because people are stupid, they will believe a lie because they want to believe it’s true, or because they are afraid it might be true
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Dateien schicken über Tserver/Tclient

  Alt 15. Sep 2008, 09:56
Mach mal in der Deklaration aus string->shortstring (sofern du mit 255 Zeichen auskommst)

Edit: Ansonsten müsstest du ein paar Klimmzüge mehr machen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#3

Re: Dateien schicken über Tserver/Tclient

  Alt 15. Sep 2008, 12:13
oder
Delphi-Quellcode:
Type
  Taktion=(Texte,Setzen, Drop);
  TInformation = record
    Aktion: Taktion;
    Kommentar: string[200];
  end;
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

Registriert seit: 13. Feb 2007
306 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Dateien schicken über Tserver/Tclient

  Alt 15. Sep 2008, 12:40
Delphi-Quellcode:
Type
  Taktion=(Texte,Setzen, Drop);
  TInformation = record
    Aktion: Taktion;
    Kommentar: string[200];
  end;
du willst doch nich wirklich en record übers netzwerk versenden ?
"Never touch a running system administrator !"
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Dateien schicken über Tserver/Tclient

  Alt 15. Sep 2008, 12:49
Zitat von jokerfacehro:
du willst doch nich wirklich en record übers netzwerk versenden ?
Wieso nicht? Mach ich auch ständig. Und wie hier ist das ein ganz normales Anwenderprotokoll. Ich gebe allerdings zu, dass ich das mit dem String ein wenig anders mache als einen Shortstring zu nehmen. Shortstring ist jetzt aber die schnellste Lösung.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

Registriert seit: 13. Feb 2007
306 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Dateien schicken über Tserver/Tclient

  Alt 15. Sep 2008, 13:31
records sind sehr unflexibel und nicht wircklich zum versenden geeignet.
kompatibilität zwischen verschied. versionen des programms = 0 wenn man den aufbau des records ändert.

besser wäre es, alle teile einzeln zu verschicken, und die sachen mit nem header zu identifizieren und auf der anderen seite wieder ins record zu packen.außerdem kann man so beliebig lange strings versenden.

im record wird nur der pointer auf den string gespeichert, verschickst du das record bekommst nur den pointer mitgesendet, wenn du das beispiel aufm localhorst laufen lässt gibts keine probs aber im lan und wan oder lieg ich da falsch ?!
"Never touch a running system administrator !"
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Dateien schicken über Tserver/Tclient

  Alt 15. Sep 2008, 13:34
Zitat von jokerfacehro:
besser wäre es, alle teile einzeln zu verschicken, und die sachen mit nem header zu identifizieren und auf der anderen seite wieder ins record zu packen
Und der Zusammenbau des Headers macht sich sehr schön und simpel wartbar über Records. Und da man übers Netz eh packed records schickt, hat man keine Probleme mit Versionen (bzw. nicht mehr, als man ohnehin bei Versionsumstellungen hat).
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#8

Re: Dateien schicken über Tserver/Tclient

  Alt 15. Sep 2008, 13:50
ist es nicht aber so,
das wenn der Record zu groß ist, wird dieser nicht ganz versendet?
  Mit Zitat antworten Zitat
Benutzerbild von smallsmoker
smallsmoker

Registriert seit: 12. Nov 2007
Ort: Duisburg
283 Beiträge
 
#9

Re: Dateien schicken über Tserver/Tclient

  Alt 15. Sep 2008, 14:00
Zitat von Jackie1983:
ist es nicht aber so,
das wenn der Record zu groß ist, wird dieser nicht ganz versendet?
man kann kein record verschicken ..
man verschickt nur den pointer auf das record auf deinem pc.
man müsste die einzelnen werte des records mit trennzeichen aneinanderhängen verschicken und dann auf der anderen seite wieder trennen.

Diese lösung is aber eher suboptimal, guck einfach mal hier rein: link

p.s.: die seite is momentan down deshalb hier ein mirror des tutorials

mfg smallsmoker
  Mit Zitat antworten Zitat
Benutzerbild von vsilverlord
vsilverlord

Registriert seit: 7. Jan 2008
Ort: Baden Württemberg- Hohenlohekreis
174 Beiträge
 
RAD-Studio 2009 Arc
 
#10

Re: Dateien schicken über Tserver/Tclient

  Alt 15. Sep 2008, 16:52
vielen Dank, dass ist ein super Tutorial. Ich hatte mir schon irgendwie überlegt, dass das Senden von Daten, die keine Strings sind, auch über Strings gesendet werden könnten, aber ich wusste natürlich nicht genau wie ich das umsetzen sollte, bei mir wäre da auch viel schief gegangen. Ich werde das jetzt einmal probieren. Über records wäre es natürlich 1000 mal einfacher. Wenn ich jetzt zum Beispiel ein einfaches Netzwerkspiel programmieren wollte, z.b ein bomberman, dann müssen ja alle Befehle und jede einzelne Aktion über Kommunikation mit dem Server mit strings laufen. Das würde bedeuten, dass ich ziemlich viele Befehle bekommen würde, über Records könnte ich einfach die ganzen Koordinaten senden. Wie soll ich das jetzt machen? Bis jetzt hat das mit den Records, sprich dem receivebuf bei mir ja noch gar nicht funktioniert.
//edit: gibt es irgendwelche Beispiele für Netzwerkspiele mit Tserver/Tclient, oder ist das schon so alt, dass nur noch indy besteht?
Volker
~beware
Wizards First Rule:
People are stupid; given proper motivation, almost anyone will believe almost anything. Because people are stupid, they will believe a lie because they want to believe it’s true, or because they are afraid it might be true
  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 06:03 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