Autor Beitrag
Hagbard Celine
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 119



BeitragVerfasst: Di 20.08.02 15:25 
Hi,

Ich bin gerade dabei ein paar Tools zu einem System zusammenzubauen!

Es wäre vieleicht interessant das ganze auf Client-Server Basis aufzuziehen, Rechte und so!!!!

Jetzt aber die alles entscheidende Frage :

Was ist Client Server !
Ich Code schon einige Jahre und habe schon einiges im Bereich Netzwerk geschaft!

Datenbanken zentral,Chat,Daten über SocketKomp.,Internet,.....

Das aber genau ist Client Server !
Hab schon einige Tutorials gesucht, aber bin nicht so ganz schlau draus geworden!

Meine Hauptfrage :

Ich Code also zwei Programme,
eines ist mehr oder weniger nur die GUI die auf richtige Eingaben prüft,
das zweite nimmt dann die zu sichernden Daten legt diese in der Datenbank ab und reagiert evtl.(z.B. alle Beobachter dieses Datensatzes aktualisieren,....)

Ich hätte das jetzt über die Socket Komp. gelöst!

Gibt es eine bessereLösung? Client-Server?????

z.B.:

Ich stelle eine Anfrage an die Serverkomponente,
die Serverkomponente soll mir einen Auszug aus der Mitgliederdatenbank zurückgeben(über Sockets möglich, klar!),
aber gibt es eine Möglichkeit ohne Konvertierung in Text und Wiederherstellung nach der Übertrageung komplette Datenmengen zwischen Prozessen und Rechnern zu übermitteln????
Renegade
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 358

Win XP Pro, Win 7 Beta
BDS 2006
BeitragVerfasst: Mi 21.08.02 09:41 
Moin erstmal!

Hagbard Celine hat folgendes geschrieben:
Jetzt aber die alles entscheidende Frage :

Was ist Client Server !


Simpel erklärt ist das folgendes: Du hast ein Prog welches in einem Netzwerk einen Service zur Verfügung stellt - z.B. einen Mail-Server, einen Datenbankserver... . Dieses Prog ist dann "der Server".

Nun brauchst du als Gegenstück für die Workstations eine Software die diese Daten vom Prog auf dem Server abfragt - z.B. einen Mail-Client, eine DB-Software... Dieses Prog ist dann "der Client."

Und wenn ich dein posting richtig überflogen habe hast du demnach schon Client/Server Anwendungen etnwickelt.

Gruß Renegade

_________________
Sokrates (468 v.Chr. - 399 v.Chr.)
"Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
Hagbard Celine Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 119



BeitragVerfasst: Mi 21.08.02 13:54 
Renegade hat folgendes geschrieben:
Und wenn ich dein posting richtig überflogen habe hast du demnach schon Client/Server Anwendungen etnwickelt.


Das ist schon mal gut zu wissen!

Gibt es bestimmte Schnittstellen welche im CLient-Server Bereich eingesetzt werden?

Sind die Socket komponenten eigendlich kompatibel zu anderen komponenten z.B. von Java????

Kann ich einen Server unter Java von Delphi aus über Socket ansprechen??

Danke!
lemming
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: Mi 21.08.02 14:29 
Hallo Hagbard.

Wenn du dich mit Client-Server auseinander setzen möchtest, empfehle ich dir das OSI-7-Schichten-Modell (bzw. OSI Referenzmodell) mal anzuschauen. Es beschreibt wie Rechner in einem modernen Netzerk miteinander kommunizieren. Wie z.B. dem Ethernet, Token Ring etc.

Es besteht wie der Name schon sagt aus sieben Schichten. Diese wären,
1 Physical Layer
2 Data Layer
3 Network Layer
4 Transport Layer
5 Session Layer
6 Presentation Layer
7 Application Layer

Schicht 1 wäre die Physikalische Schicht. Sprich dein Netzwerkkabel, deine Netzwerkkarte.

Als Programmierer arbeitest du in der Regel auf Schicht 4 und 5. Dem Transport und Session Layer.

Du musst dich auf Schicht 4 entscheiden ob du TCP oder UDP nehmen möchtest. Eine Faustregel zur Auswahl wäre wohl wie sicher müssen deine Daten ankommen.

UDP funktioniert nach dem Send-And-Forget Prinzip. Es wird zuvor keine Verbindung aufgebaut, sondern der Stream (die Pakete) werden einfach abgeschossen. Es kommt keine automatische Meldung von irgendeinem Layer ob das Paket auch ankam geschweige den richtig. IRC und Spiele wie Quake und Half-Life setzen auf UDP.

Bei TCP funktioniert das anders. Zunächst wird eine Verbindung aufgebaut (Connect). Besteht diese können Daten getauscht werden. Danach wird die Verbindung getrennt. Das die Daten richtig und vollzählig ankamen wird auf Schichten 3 geprüft. Von deienm TCP/IP Protokoll (Socket) in diesem Fall.

Fazit: es kommt also darauf was du machen willst um die richtige Entscheidung zu treffen. UDP oder TCP. beides verwendet IP Adressen - sind aber trotzdem völlig verschieden. Schau dir doch mal die UDPDemo von deinem Delphi an. Da wird per TNMUDP Text zwischen zwei Computern (oder nur eienm) ausgetauscht.

lemming
Günter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 21.08.02 14:35 
Titel: Re: Client/Server?????
Hallo Celine!

Wenn man im Netzwerk kommuniziert (meist über TCP/IP) ist es völlig egal, ob die Kommunikationspartner mit der gleichen Sprache programmiert wurden --> es werden nur Binärdaten gesendet.

Problematisch wird es erst, wenn man Objekte oder Strukturen (Records) übermitteln will. Java kennt keine Records, und die Objekte sind auch nicht kompatibel.


Lösung:

Schicke deine Daten als String (Text), der kann von Java und von Delphi gelesen werden. Man muss sich nur eine geeignete Formatierung für die Strings überlegen, so dass sie vom Kommunikationspartner sinnvoll interpretiert werden können.

(Auf diese Weise arbeitet z.B. auch der InternetExplorer - HTML wird als Text geschickt, der IExplorer interpretiert diesen und zeigt dann eine Internet-Seite an)
Hagbard Celine Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 119



BeitragVerfasst: Mi 21.08.02 20:46 
lemming hat folgendes geschrieben:
....Fazit: es kommt also darauf was du machen willst um die richtige Entscheidung zu treffen. UDP oder TCP. beides verwendet IP Adressen - sind aber trotzdem völlig verschieden. Schau dir doch mal die UDPDemo von deinem Delphi an. Da wird per TNMUDP Text zwischen zwei Computern (oder nur eienm) ausgetauscht.

lemming


Super Beitrag!!!
Danke.

Werde mich in den nächsten Tagen mal damit auseinandersetzen, kenne die Schichten aus der Uni!
Manchmal braucht man einfach die Verbindung!!!

Bei mir wird es darum gehen E-Mails abzuholen, Datenbanken auszuwerten,.... und die Ergebnise/Mails als Text an Clients zu senden!

Günter hat folgendes geschrieben:

Schicke deine Daten als String (Text), der kann von Java und von Delphi gelesen werden. Man muss sich nur eine geeignete Formatierung für die Strings überlegen, so dass sie vom Kommunikationspartner sinnvoll interpretiert werden können.


Dir auch danke, das mit Java und dem annehmen der Strings muss ich dan meinem kollegen mal zu Aufgabe machen, wäre natürlich genial!!

Das mit den Texten ist mir nicht ganz neu!!!

Habe da im alten Forum mal mit ein paar anderen einige Funktionen zur speicherung mehrerer Dateien in einer Datei zusammengetragen :

Dies sind die entscheidenten Funktionen die in Strings umgewandelten Dateien zu speichern!!

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
procedure TMultiStringFile.Add(newItem : String);
VAR i : Longint;
    s : String;
begin
  if isset then begin
    seek(F,filesize(f));
    s := NewItem;
    i:=length(S);
    BlockWrite(F,I,4);
    BlockWrite(F,S[1],length(s));
    end;
  end;

function TMultiStringFile.get : TMSFStrings;
VAR i, row : Longint;
    s : String;
    ResultSet : TMSFStrings;
begin
  if isset then begin
    seek(f,0);
    row := 0;
    while not eof(F) do begin
      BlockRead(F,I,4);
      SetLength(S,I);
      BlockRead(F,S[1],I);
      setLength(ResultSet,length(ResultSet)+1);
      ResultSet[length(ResultSet)-1] := s;
      inc(row);
      end;
    end;
  result := ResultSet;
  end;


Das bringt mich zum nächsten Ansatz :

Das ist ja eine Möglichkeit Dateien über Sockets zu schicken, einziger"Nachteil" Es müssen temp Dateien erzeugt werden in welche die Inhalte gespeichert werden, dann werden diese Übertragen und können wieder gelöscht werden.

Kennt einer eine Möglichkeit einen ähnlichen Weg oder eine andere Alternative Mehrere String(Dateien) Zusammenzufügen und als einen Text zu verwenden ohne diese in eine Datei zu schreiben???
Möchte auf temp Dateien verzichten!
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Do 22.08.02 02:05 
Hallo,

versuche gerade die Temp-Dateien im Netzwerk pro Arbeitsplatz eindeutig hinzukriegen. Nicht einfach. Brauchst du keine Dateien, dann leg sie doch in eine Variable. Oder sind es 100000 oder wieviel strings?

Gruß
Hansa
Hagbard Celine Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 119



BeitragVerfasst: Do 22.08.02 08:16 
hansa hat folgendes geschrieben:
Hallo,

versuche gerade die Temp-Dateien im Netzwerk pro Arbeitsplatz eindeutig hinzukriegen. Nicht einfach. Brauchst du keine Dateien, dann leg sie doch in eine Variable. Oder sind es 100000 oder wieviel strings?

Gruß
Hansa


Das mit der Variable ist weniger das Problem,mehr die Frage wie schreibe ich die Werte rein??

In dem obigen Verfahren haben wir immer erst die Größe und dann den Wert gespeichert,
Den Wert aber nicht als String!
Es könnte eine Lösung sein eine Funktion zu schreiben welche mir eine Zahl direkt in einen 4Byte String umwandelt als Ersatz für
ausblenden Quelltext
1:
BlockWrite(F,I,4);					


Welcher Datentyp ist eigendlich der günstigste für endlostexte?
Habe bisher immer Stringlistsverwendet um Zeilenweise ansprechen zu können, jetzt muss ich aber auf beliebige Bereiche im String zugreifen!
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Do 22.08.02 15:20 
Hallo,

verstehe zwar immer noch nicht genau, was du vorhast, aber Endlostext heißt für mich, daß er schon endlich ist, aber du noch nicht die genaue Größe kennst.

Das aber ist doch der klassische Ansatz für eine Datei. Die wächst oder schrumpft und dem Programm ist eigentlich egal wie groß sie gerade ist.
Eine Datei aber ist immer noch am besten auf der Festplatte aufgehoben.

Du sagst Endlostext, also ein text, warum speicherst Du das nicht in einer Textdatei also vom Typ text ?

VAR MeinText : text;

Oder guck Dir mal die memofelder an.


Gruß
Hansa
Günter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 22.08.02 15:28 
Hallo Celine,

Ich würde auf alle Fälle TStrings (bzw. TStringList) verwenden:

Jeder String hat Platz für 2^31 Zeichen (Compiler Grundeinstellung), das sind etwa zwei Milliarden Zeichen, das reicht auch für grosse Datensätze.

Eine Stringliste kann man direkt in einen Stream schreiben 'SaveToStream, LoadFromStream'.

Über die Property 'Text' erhältst du den Inhalt der Stringliste als String und kannst beliebig auf den Inhalt zugreifen.

Mit SaveToStream werden die einzelnen Zeilen mit CR/LF (Wagenrücklauf/Neue Zeile) getrennt und können so auch von anderen Sprachen eingelesen werden.


Du sprichst außerdem von einer Datenbank-Anwendung --> es ist doch sowieso praktisch die einzelnen Datensätze als einzelne String zu verwalten ( Sortieren, Zeilen Löschen, einfügen, ...).

Gruß Günter