AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array versendbar?

Ein Thema von Sheak · begonnen am 2. Jan 2008 · letzter Beitrag vom 5. Jan 2008
Antwort Antwort
Seite 1 von 2  1 2      
Sheak

Registriert seit: 2. Jan 2008
6 Beiträge
 
Delphi 7 Personal
 
#1

Array versendbar?

  Alt 2. Jan 2008, 20:15
Nabend und frohes neues liebe Delphi-Praxis-Community und -Admins,

im Zuge einer Facharbeit an unserer Schule schreibe ich an einem kleinen Programm mit Delphi, welches ich dann für die Facharbeit analysiere und den Weg zum Endprodukt hin beschreibe.

Mein Ziel ist, dass ich Daten erzeuge, welche ich an meinen gegenüber im Netzwerk schicke, welcher sie dann (mittels des Programms) interpretiert. Es sind etwa 8 Werte.

Eingefallen sind mir 2 Wege:

1) ich speichere die Daten in einem Array und verschicke diesen an meinen gegenüber

2) ich limitere die Stellenanzahl die die Werte annehmen können, was dann in etwa aussieht wie "1,259,032,259,033"

Zu 1) hab ich (leider) rein gar nix, weder in der Community hier noch bei google gefunden, genauso wie bei 2) ich keien Möglichkeit gefunde habe, vor den String mehrere Nullen zu Adden.

Jemand eine anregende Idee?
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#2

Re: Array versendbar?

  Alt 2. Jan 2008, 20:38
Mahlzeit!

1) ich speichere die Daten in einem Array und verschicke diesen an meinen gegenüber Ich glaube ein Array kannst du nicht einfach so verschicken. Aber keine Angst, es gibt wirklich genug Wege, die nicht besonders kompliziert sind. Du hast es im Prinzip schon selbst hingeschrieben: "1,259,032,259,033" - Das wäre ein String, und die länge der Daten musst du dabei auch nicht festlegen, wenn du zum Beispiel ein "," als Trennzeichen verwendest, mit dessen Hilfe das Gegenüber die Daten wieder auseinandernimmt. Das wäre glaube ich die einfachste Möglichkeit, und wie es sich für mich anhört, muss die Sache nicht extrem professionell sein.

Zu 1) hab ich (leider) rein gar nix, weder in der Community hier noch bei google gefunden, genauso wie bei 2) ich keien Möglichkeit gefunde habe, vor den String mehrere Nullen zu Adden. Falls dir die Grundlagen fehlen, empfehle ich dir mal ein Tutorial zu Delphi allgemein, davon rückt Google einige raus. Das soll nicht provozieren, aber könnte glaube ich helfen. Für Socket-Geschichten sind glaube ich Komponenten bei Delphi dabei, ich persönlich bevorzuge die ICS von www.overbyte.be. Die Indy-Komponenten gibt es dann auch noch, für beide Sammlungen gibt es Genug Beispiele...

HTH
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Array versendbar?

  Alt 2. Jan 2008, 20:53
Zitat von wicht:
Ich glaube ein Array kannst du nicht einfach so verschicken.
"Glauben heißt, Nichts wissen" hat mein Lehrer immer gesagt. Ist schon ne Weile her, stimmt aber immer noch.

Du kannst beliebige Daten in einem Stream speichern und diesen Stream dann übertragen. Auf der anderen Seite ließt Du den Streaminhalt wieder in deine beliebigen Daten.

Ich glaube, bei den Delphi-Demos ist ein Beispiel mit Sockets, be denen das gezeigt wird. Wenn nicht, würde ich die Indy-Komponenten nehmen, da diese einfacher zu handhaben sind. Dafür sind sie nicht optimal, aber das ist hier egal. Es spielt nur dann eine Rolle, wenn man sehr viele Daten gleichzeitig verschickt und empfängt (Stichwort: Asynchrone Übertragung).

Weiterhin kannst du Daten auch in einen String packen, verschicken und auf der anderen Seite wieder entpacken. Hier würde ich die Formate 'XML' oder 'JSON' empfehlen. Alles Andere ist Frickelei, denn man sollte sich schon weitestgehend an Standards halten. Und XML bzw. JSON sind Standards.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#4

Re: Array versendbar?

  Alt 2. Jan 2008, 21:15
*grr*.. Sage ich mal so: Ich kenne keine Klasse, die einem eine Funktion wie TClient.Send(array of string) zur Verfügung stellt Naja ääh.. wie gesagt.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#5

Re: Array versendbar?

  Alt 2. Jan 2008, 22:07
öhm wenn du die IndyTco's nutzt kannst du auch den befehl WriteBuffer benutzen

und zwar so

 Client.WriteBuffer(Array, SizeOf(Array)); Das ganze ist recht einfach, mit SizeOf bestimmst du die binäre größe des arrays und dann wird einfach das array binär geschikt.

Wenn du jetzt das array wieder empfangen willst benutzt du einfach

Delphi-Quellcode:
type
 TDasArray = array [0..7] of integer;


var
 DestArray : TDasArray;

 Server.ReadBuffer(DestArray, SizeOf(TDasArray));
Hier ists was kniffliger, da du ja die größe von dem array nicht kennst, aber alles kein problem, denn wir wissen wie das array aussieht. und zwar sind es acht integer von 0 - 7. also 8 mal SizeOf(integer)...

So nun lesen wir also diesen wert ein und zwar in die Variable DestArray, die vom tüp her unserem gesendeten array enspricht..

und fetisch sind wir
Lars
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Array versendbar?

  Alt 2. Jan 2008, 22:45
Bei dynamischen Arrays geht das so nicht. Da muss das dann heißen :
Client.WriteBuffer(Array[0], length(Array)*sizeof(<Array-Elementtyp>); Bei mehrdimensionalen, dynamischen Arrays ist das wieder anders. Ein solches Array ist nämlich eigentlich ein Array von Pointern, die (je nach Dimension) wieder auf weitere Arrays zeigen. Erst die Arrays der letzten Dimension enthalten dann die eigentlichen Array-Elemente. Da muss man dann mithilfe von for-Schleifen das ganze auftrennen. Also bei einem array mit den Längen a und b sähe das so aus:

Delphi-Quellcode:
Client.WriteInteger(length(Array)); //Damit der Emfpänger weiß, wie viele Werte durchkommen
for I:=0 to high(Array) do
  Client.WriteBuffer(Array[I][0], length(Array[I])*size(<Array-Elementtyp>));
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Sheak

Registriert seit: 2. Jan 2008
6 Beiträge
 
Delphi 7 Personal
 
#7

Re: Array versendbar?

  Alt 5. Jan 2008, 16:36
Erstmal danke für die Hilfe!
Bin nun in der Lage den Array zu versenden, allerdings stehe ich nun vor einem neuen Problem: Der Array bekommt die ersten Werte zudefiniert und verschickt diese, alles wunderbar. Aber nach dem ersten Senden werden die Werte nicht überschrieben, sondern die alten Werte bleiben erhalten (sry für meien Dummheit ). Wie kann ich die Array-Werte (nicht die Array-Länge) dynamisch machen?
  Mit Zitat antworten Zitat
Benutzerbild von little_budda
little_budda

Registriert seit: 5. Mai 2006
Ort: Velbert
246 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Array versendbar?

  Alt 5. Jan 2008, 16:43
Ein Array-Wert ist immer dynamisch.
Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Array versendbar?

  Alt 5. Jan 2008, 16:46
Zitat von little_budda:
Ein Array-Wert ist immer dynamisch.
Was will uns der Autor damit sagen?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Array versendbar?

  Alt 5. Jan 2008, 16:54
Zitat von Sheak:
Wie kann ich die Array-Werte (nicht die Array-Länge) dynamisch machen?
Einfach den neuen Wert zuweisen?

Zitat von little_budda:
Ein Array-Wert ist immer dynamisch.
Ok, dann hier die Aufgabe:

Delphi-Quellcode:
const
  arr: array[0..4] of integer = ( 1, 2, 3, 4, 5 );
Ändere Eintrag Nummer 2 - ist ja schliesslich immer dynamisch...

Und dies ohne die (standardmäßig) deaktivierte Option für änderbare Konstanten zu verändern. Sprich: auch keine Zeigerarithmetik...
  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 11:46 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