![]() |
Dateien schicken über Tserver/Tclient
Hallo, ich möchte Informationen senden. Das mit receivetext hat schon funktioniert, daber das mit reveivebuf funktioniert nicht. :shock:
Ich habe eine einen eigenen Type, der jeweils im Serverprogramm und im clientprogramm deklariert ist:
Delphi-Quellcode:
Erstmal will ich nur Textnachrichten senden können, und zwar per Button:
Type
Taktion=(Texte,Setzen, Drop); TInformation = record Aktion: Taktion; Kommentar: string; end;
Delphi-Quellcode:
im server wird dann gelesen und an alle geschickt:
var
information:tinformation; begin information.Aktion:=texte; information.Kommentar:=edit1.text; clientsocket1.Socket.SendBuf(information,sizeof(information)) end
Delphi-Quellcode:
im client wiederum wird das dann wieder ausgegeben:
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;
Delphi-Quellcode:
Nur leider kommt ein grober böser hässlicher Fehler, und zwar in der Server.exe
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; Theoretisch könnte ich die Informationen auch über sendtext machen, aber da ich da nur strings senden kann, ist das ziemlich quälend. :gruebel: |
Re: Dateien schicken über Tserver/Tclient
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. |
Re: Dateien schicken über Tserver/Tclient
oder
Delphi-Quellcode:
Type
Taktion=(Texte,Setzen, Drop); TInformation = record Aktion: Taktion; Kommentar: string[200]; end; |
Re: Dateien schicken über Tserver/Tclient
Delphi-Quellcode:
du willst doch nich wirklich en record übers netzwerk versenden ? :shock:
Type
Taktion=(Texte,Setzen, Drop); TInformation = record Aktion: Taktion; Kommentar: string[200]; end; |
Re: Dateien schicken über Tserver/Tclient
Zitat:
|
Re: Dateien schicken über Tserver/Tclient
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 ?! :gruebel: |
Re: Dateien schicken über Tserver/Tclient
Zitat:
|
Re: Dateien schicken über Tserver/Tclient
ist es nicht aber so,
das wenn der Record zu groß ist, wird dieser nicht ganz versendet? |
Re: Dateien schicken über Tserver/Tclient
Zitat:
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: ![]() p.s.: die seite is momentan down deshalb ![]() mfg smallsmoker |
Re: Dateien schicken über Tserver/Tclient
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. :cry:
//edit: gibt es irgendwelche Beispiele für Netzwerkspiele mit Tserver/Tclient, oder ist das schon so alt, dass nur noch indy besteht? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz