Autor Beitrag
alex_id
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73



BeitragVerfasst: Fr 03.01.03 18:38 
Hi Leutz !!!

Also ich möchte daten zwischen einem Server und mehren Clients austauschen ... aber die daten sollen unterschiedlich gesendet bzw empfangen werden (je nach Benutze) und das zu "gleichen" Zeit !!
D.h. es können sich mehrere Benutze auf dem Server anmelden und anfragen senden. Die Clients sollen je nach "Recht" Daten an den Server senden können !!!
Meine Fragen :

Wie realisiere ich die Logins ?
Wie kann ich das unterschiedliche Senden und Empfangen realisieren ?

THX @ ALL

_________________
Es gibt viele Wege, doch man kann nur einen gehen!
patmann2001
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 201

Windows 7 Prof.
Delphi XE2
BeitragVerfasst: So 12.01.03 14:27 
Willst Du sowas wie einen Chat programmieren?
Was meist Du mit rechten.
Könntest Du irgendwie etwas genauer werden.
Grundsätzlich kannst Du es mit Threats probieren. Es geht aber auch anders. Wie gesagt, ich brauchte da mal mehr Info, was Du senden lassen willst und wie...

cu Patmann
alex_id Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73



BeitragVerfasst: Mo 13.01.03 17:13 
Hi !!! danke erst mal für die Antwort !!!
Aber ein Chat soll es nicht werden !!!
Es soll ein Client Server Programm für bis jetzt 3 User werden !!!
Einer davon Admin ! Die anderen sollen Daten senden, empfangen und verändern können ... aber sie sollen nicht alles ändern können !!!
Danke noch mal !!!

_________________
Es gibt viele Wege, doch man kann nur einen gehen!
patmann2001
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 201

Windows 7 Prof.
Delphi XE2
BeitragVerfasst: Do 16.01.03 17:00 
Hi
Also da gibt es eigentlich nur zwei Möglichkeiten
1) ReceiveBuf / SendBuf
2) SendStream / ReadBuf

zu 2) kann ich Dir leider nicht viel sagen, da ich das noch nie probiert habe.
zu 1) Ich habe da folgenden Vorschlag für Dich.
Du baust zwei Typen z.B.
ausblenden 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:
{$A-} //Erste Zeile der Unit Compilerbefehl
...//Noch Code
Type
Daten_Typ = Record
                       Prog_Code:Array[0..2] OF Char;
                       User:Array[0..4] OF Char;
                       Comn_Code:Word;
                       Comn_ID:Word;
                       BufLength:Word;
                       Daten:Array[0..1024] OF Byte;
                    End;
Speicher_Typ = Array[0..1038] OF Byte;
... //Noch Code
VAR
  dateieing,datenausg : Daten_Typ;
  datain,dataout : ^Speicher_Typ;
... //Noch Code
Procedure ...OnCreate... //Procedure Form1OnCreate
BEGIN
  ...//Noch Code
    datain := @dateieing;
    dataout:= @datenausg;
  ...//Noch Code
END;
... //Noch Code

So
Ich will das jetzt mal kurz erklären.
Der Copilerbefehl {$A-} bedeutet ALIGN OFF. Normalerweise sortiert Delphie Variablen immer so, das gerade Speicheraddressen verwendet werden. Wenn Du jetzt aber mit einer Variable mal eine Addresse nur "halb" füllst, dann werden die nachfolgenden Bit's ignoriert. Deshalb kann es passieren das Deine Variablen mal größer ist und mal kleiner im Register. Wenn man aber später einen Record mit Move in einen Buffer schreiben möchte, das dann versenden muss und der Empfänger muss daraus wieder den gleichen Record machen dann sollte man darauf achten, das die Länge immer genau gleich ist. Also ALIGN OFF an.
Ich habe hier einen Daten_Typ gemacht. Er soll Dir als Beispiel dienen. In Prog-Code werden drei Zeichen abgesendet und das empfangende Programm kann feststellen ob der ganze Datensatz wirklich verstanden wird.
User soll ein Username sein, um eine Eindeutige ID zu haben.
Comn_Code da kannste dann "Befehle" übermitteln, wie z.B. 1 Datei lesen, 2 Datei schreiben, 3 Datei löschen etc.
Comn_ID wenn ein Datensatz länger ist als 1kB dann kannst Du daran immer erkennen an welchen Datensatz der Inhalt von Daten angehängt werden soll
BufLength gibt dir die Länge des Datensatzes in der Variable Daten. Ist Daten mal kleiner als 1kB dann solltest Du natürlich auch nur das kurze Stück verarbeiten, sonst hast Du Datenmüll dazwischen.
Der Speicher_Typ ist genauso lang wie der Record. Prog_Code sind 3 Byte, User 5 Byte, Comn_Code, Comn_ID und BufLength jeweils 2 Byte und dann natürlich Daten mit 1025 Byte. Ergebniss 1039 Byte von 0 bis 1038
Dann kommen die Variablen zu den Typen, Achtung datain,dataout sind Pointer.
Jetzt kommt aber der eigentliche Trick. Im ONCreate verbindest du die PointerVariable mit den Speicheraddressen der RecordVariablen. Ergebniss: Du greift mit zwei Variablennamen auf den gleichen Dateninhalt zurück.
So
bei SendBuf(dataout,1039) sendest Du jetzt den Inhalt des Records zum Server oder Client
mit ReceiveBuf(datain,1039) empfängst Du in der Procedure serversocket1OnClientRead bzw. ClientSocket1OnRead den Datensatz, da der Record mit den Variablen verknüpft ist, ist der Inhalt damit auch sofort im Record für Dich abgreifbar.
Ich hoffe, das Dir das etwas weiterhilft. Natürlich kannst Du den Record anders aufbauen, must jedoch den Speicher_Typ mit der größe mitführen damit der Record auch hineinpast.

cu Patmann
alex_id Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73



BeitragVerfasst: Do 16.01.03 19:10 
Hi Patmann

Danke für deine Mühe !!!
Ich werd es probieren und melde mich wieder mit erfolgen oder auch nicht :)
also danke noch mal !!!

cu
Alex

_________________
Es gibt viele Wege, doch man kann nur einen gehen!