Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi kann bei OnConnect keine TStrings liste übergeben (https://www.delphipraxis.net/104993-kann-bei-onconnect-keine-tstrings-liste-uebergeben.html)

DeddyH 13. Dez 2007 21:57

Re: kann bei OnConnect keine TStrings liste übergeben
 
Delphi-Quellcode:
Nachricht.Nickname := 'Hello';
Nachricht.More := TStringList.Create;
try
  Nachricht.More.Assign(Listbox1.Items);
  Socket.SendBuf (Nachricht, SizeOf(Nachricht));
finally
  Nachricht.More.Free;
end;
Mal so versucht? Wobei ich jetzt nicht ganz sicher bin, ob nicht nur der Zeiger auf das Objekt übertragen wird. In dem Fall muss man sich etwas anderes überlegen.

k4ni 13. Dez 2007 22:03

Re: kann bei OnConnect keine TStrings liste übergeben
 
Danke, geht aber auch nicht :(

Normale strings zu senden und zu empfangen geht ganz einfach, aber das ist nicht so leicht.

DeddyH 13. Dez 2007 22:04

Re: kann bei OnConnect keine TStrings liste übergeben
 
Das hatte ich befürchtet. Du wirst wohl nur den Objektzeiger übergeben.

k4ni 13. Dez 2007 22:15

Re: kann bei OnConnect keine TStrings liste übergeben
 
Also ich hab das vorher falsch eingefügt sorry.

Jetzt geht es schon weiter und die adress violation kommt jetzt später wenn es das macht:
Delphi-Quellcode:
Listbox1.Items.AddStrings(Nachricht.More);
das geht auch nicht:
Delphi-Quellcode:
Listbox1.Items.Assigns(Nachricht.More);
obwohl ich oben before
Delphi-Quellcode:
  Socket.ReceiveBuf (Nachricht, SizeOf(Nachricht));
das gemacht hab
Delphi-Quellcode:
Nachricht.More := TStringList.Create;

Muetze1 13. Dez 2007 22:50

Re: kann bei OnConnect keine TStrings liste übergeben
 
In der Nachricht ist More eine Klassenreference. Dies ist nur die Adresse, wo die Klasse liegt aber nichtmal ansatzweise die Adresse wo die Strings liegen. Du versendest einfach nur die Adresse, wo in der Application vom Server die Klasseninstanz liegt. Das bringt dir rein gar nichts, weil ob beim Client eine gültige Instanz an der Stelle liegt ist mehr als fraglich (sirius letzte Aussage: 1 zu 4 Milliarden) und zum anderen würde die Instanz immernoch keine Strings haben - weil die gar nicht übertragen werden.

Versende die Userliste aus dem TStrings Objekt als String. Nutze dazu die Eigenschaft Text um es in die Nachricht als String abzulegen und weise es nach dem Empfang wieder der Text Eigenschaft zu, um wieder eine Liste zu erhalten.

k4ni 13. Dez 2007 23:18

Re: kann bei OnConnect keine TStrings liste übergeben
 
Ohh ya :) Vielen dank!

Also zum senden verwende ich jetzt
Delphi-Quellcode:
Nachricht.Nickname := 'Hello';
Nachricht.Text := Listbox1.Items.Text;
Socket.SendBuf (Nachricht, SizeOf(Nachricht));
und zum empfangen

Delphi-Quellcode:
if Nachricht.Nickname = 'Hello' then begin
Listbox1.Clear;
Listbox1.AddItem(Nachricht.Text, NIL);
Doch im client empfang ich alle namen in einer reihe wie kann ich das ändern?
Oder mach ich das alles überhaupt richtig?

EDIT: In einem Memo wurde es die zeilenumbrüche mitnehmen, aber nicht in einer Listbox.

k4ni 13. Dez 2007 23:46

Re: kann bei OnConnect keine TStrings liste übergeben
 
Gibt es wirklich keinen weg das als TStrings lsit zu senden?

Muetze1 14. Dez 2007 00:16

Re: kann bei OnConnect keine TStrings liste übergeben
 
1. Pushen ist erst nach 24 Stunden erlaubt, also lass uns doch erstmal Zeit, deine Beiträge zu lesen. Wir werden hier schliesslich nicht bezahlt für die Arbeit!

2. Du hast es nicht so umgesetzt, wie ich es geschrieben habe. Senden schon, aber beim empfangen weist du es nicht der Text Property zu.

k4ni 14. Dez 2007 00:47

Re: kann bei OnConnect keine TStrings liste übergeben
 
Oh, Sorry!
Ich mach daran jetzt schon lange herum.
Kannst du mir bitte sagen wie es geht?

SirThornberry 14. Dez 2007 06:55

Re: kann bei OnConnect keine TStrings liste übergeben
 
auch beim senden macht er es noch falsch. Er sendet weiterhin die Objectreferenz "Nachricht" und nicht den Text "Nachricht.Text".
Delphi-Quellcode:
var
  lText: String;
begin
  lText := ListBox1.Items.Text;
  Socket.SendText(lText, Length(lText));
auf der Gegenseite dann genau so wieder empfangen.

Allerdings machst du seit her wohl einen großen Fehler. Du sendest die Daten ohne irgend ein bestimmtes Format. Das heißt wenn 2 Nachrichten kurz hintereinander gesendet werden kann es schnell mal passieren das diese als eine große Nachricht ankommen. Du müsstest dir also noch ein protokoll oder eine maskierung überlegen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 Uhr.
Seite 2 von 3     12 3      

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