# kleiner DatenServer!



## total_planlos (7. Dez 2004)

Ich habe einen kleinen Datenserver und dazu einen Client geschrieben unter Linux, d.h. der Client kann schon Daten vom Server holen, welche raufhauen, sich ein Verzeichnis vom Server ausgeben lassen und auch verzeichnisse und Daten löschen!

Im moment muss aber immer über die konsole einzelen requests an den server schicken und nach jedem request, z.B. ein "get" wird die verbindung getrennt und er kann einen weiteren befehl abschicken! ich würde aber gern den server und den client so umschreiben, dass der client sich für unbestimmte zeit einloggen kann und dann so ne art session hat! der server ist bereits multithreaded und könnte das auch machen! den client hab ich soweit auch umgeschrieben damit er sowas wie ne session hat (das programm bricht nicht nach jedem befehl ab)! das problem das ich habe ist folgendes: wenn der server zum beispiel eine datei übermittelt hat, weiss der client nicht wann er aufhören soll und den nächsten befehl starten kann! es geht eigentlich darum, transaktionen zu beenden ohne die verbindung wirklich zu beenden! 

für vorschläge wär ich sehr sehr dankbar!


----------



## meez (7. Dez 2004)

Mach zwei kanäle....
Einen für Daten, und einen für Steuerzeichen...


----------



## foobar (7. Dez 2004)

Ich hab das immer so gemacht, daß ich mir eine Transport-Klasse schreibe die als Eigenschaften eine action und ein Object für die Daten enthält. Anhand des action-Werts kann ich dann auf Client respektive Server Seite entscheiden was zu tun ist.

```
public class Transport implements Serializable
{
   private byte action;
   private Object data;
   public final static byte SEND = 1;
   public final static byte ERROR = 2;
   ......

  public Transport(byte action, Object data)
  {
    this.action = action;
     this.data = data;
  }
  
// entsprechende Getter und Setter
  
}
```


----------



## meez (7. Dez 2004)

Ja, mit einem Transport Object kann man es gut machen...Dabei ist einfach zu bedenken, dass der Server und der Client immer in Java geschrieben sein müssen....
Zudem wird bei grossen Datenmengen immer das ganze Object in den Arbeitsspeciher geladen, was bei einem File-/Datenserver mit vielen Benutztern nicht wünschenswert ist...

Die andere Möglichkeit ist, Escape und Steuerzeichen zu nutzten, wie zum Beispiel HDLC oder itrgend so ein anderes Protokoll...


----------



## foobar (7. Dez 2004)

> .Dabei ist einfach zu bedenken, dass der Server und der Client immer in Java geschrieben sein müssen....


Um das Problem zu lösen, könnte man die Daten in XML konvertieren und dann serialisieren. 
Also eine eigene kleine SOAP Implementierung


----------



## meez (7. Dez 2004)

foobar hat gesagt.:
			
		

> Um das Problem zu lösen, könnte man die Daten in XML konvertieren und dann serialisieren.
> Also eine eigene kleine SOAP Implementierung




Da hast du das Problem mit binary Daten, und zudem musst du nochmehr in den Arbeitsspeciher laden...


----------

