# Datenaustauschprogramm



## MXOR (22. Dez 2011)

Hallo Forum,

ich möchte ein Programm mit JAVA implementieren, das Daten von einem PC zu einem anderen überträgt... Im Endeffekt möchte ich mit Kollegen ein Netzwerk aufbauen das Daten in einem Ordner synchronisiert  (ich möchte jetz allerdings keine Vorschläge für Software u.ä. haben da es sind im Endeffekt nicht darum dreht das die Daten syn. sind, sondern "Wie programmiere ich sowas?") ^^

Doch erst mal klein angefangen, was muss ich dafür wissen/lernen?

Ich habe in dem Gebiet Netzwerkprogrammierung kaum Erfahrungen...
Ich lese bereits das Buch "Computernetzwerke - Galileo Press", dass ich Interessierten auch gerne weiterempfehle, finde es sehr informativ/strukturiert und gut mit Wissen vollgepackt =)
Ich denke so ein kleines Grundwissen habe ich bereits -> Was ist ein Port, es gibt Pakete, IP-Adressen...


Ich würde euch danken wenn Ihr mir weiterhelfen könnten =)

Gruß mxor


----------



## Marcinek (22. Dez 2011)

Hi,

ich verstehe nicht, wie wir hier helfen können. Du hast keine Erfahrungen und auch kein anliegendes Problem. ???:L

---

Ist es für dich nicht möglich einfach SVN oder SyncToy zu nutzen?

Gruß,

Martin


----------



## MXOR (22. Dez 2011)

Hallo Marcinek =)

Zunächst einmal denke ich das nicht "WIR", sondern du mir nicht weiterhelfen kannst, zuweiterem denk ich du hast meinen Thread gar nicht richtig durchgelesen ueh:



> *Ist es für dich nicht möglich einfach SVN oder SyncToy zu nutzen?*
> ->  (ich möchte jetz allerdings keine Vorschläge für Software u.ä. haben da es sind im Endeffekt nicht darum dreht das die Daten syn. sind, sondern "Wie programmiere ich sowas?")



Naja...

Wie gesagt, ich weiß nicht was ich wissen muss um mit Java so ein Program zu implementieren...?
Mein problem ist ich weiß nicht was ich als Source tippen soll ???:L

Von der Theorie her gehe mal davon aus das ich Ports öffnen muss, und auf der anderen Seite ein Programm der den Port abhört.. Dann müssen wohl die Daten gestreamt werden... Weiter brauche ich zwei IP Adressen die vom Sender und vom Empänger. 

Ich habe ein Tutorial für ein Chat gemacht. jedoch hat es bei mir nicht funktioniert...


----------



## Marcinek (22. Dez 2011)

Ja, ich habe in der Tat diesen Teil überlesen und gedacht "Du willst jetzt keine Tipps für Implementierung haben". Mein Fehler.

---

Wieso fängst du nicht mit einem Problem an, dass deinem Wissenstand entspricht. Vielecht ein Taschenrechner.

---

Falls du es dennoch mit dem Sync versuchen willst.

Fange mit einer Klasse an, die eine Datei von A nach B kopiert.

DAnn kann man das ausbauen, dass der nur Dateien kopiert, die Änderungsdatum < last sync haben.

Und dann kann man das noch mit einer GUI erweitern.


----------



## MXOR (22. Dez 2011)

Danke für deine Schnelle Antwort Martin =)

Ja kann jedem mal passieren 



> Wieso fängst du nicht mit einem Problem an, dass deinem Wissenstand entspricht. Vielecht ein Taschenrechner.


Wieso sollte es mich weiterbilden etwas zu tun was ich schon kann??? Wenn es dir um ein Problem geht das ich brauche, dann sagen wir mal "Ich würde gerne lernen wie", genügt das? 

Und zu den Programmen: 
Taschenrechner habe ich bereits schon programmiert... 
Daten von A nach B kopieren habe ich auch gemacht... auch an einen FTP-Server und sowas alles...
Das mit dem Änderungsdatum würde ich hinbekommen einfach das Datum einlesen und vergleichen..
Und Guis habe ich auch schon genug gemacht...

Mich interessiert nur der Teil der Daten von A nach B sendet... 
Was muss ich denn dafür wissen?? Kennst du gute Tutorials oder so was?


----------



## Marcinek (22. Dez 2011)

Puhh...

Und wenn du dir das von dem SyncToy angucken wüdest? - Ich mein du brauchst, um es einfach zu machen, eine zentrale Repositry. Ich würde dafür erstmal ieine Freigabe nehmen oder einen FTP Server (damit hast du ja schon erfahrung). Dann verwaltet man auf dem FTP eine Datei, die alle Änderungen beinhaltet.

Diese kann man sich downlaoden und dann anhand dieser feststellen, welche Items heruntergeladen werden müssen.

Den FTP Server kannst du durch eine eigene Implementierung austauschen, wo es zum Protokoll gehört, dann man dieses Changelog enthält.

Das ist aber so das keep it simple szenario, kann man beliebig ausweiten.


----------



## irgendjemand (23. Dez 2011)

für sowas sollte man nicht wild drauf los programmieren ... sondern sich erstmal ein konzept machen ...

was bei sync-geschichten ganz wichtig : EINE kontrollinstanz welche ALLE daten enthält ... über veränderungen wacht ... daten für andere user sperrt sobald einer daran rumeditiert ...

alles in allem nicht so einfach ...

wenn du noch so gut wie keine erfahrung auf dem gebiet NETWORK hast ... fange erstmal mit was kleinem wie einem Chat oder so an ... dann ein etwas komplexeres spiel vielleicht ... aber gleich von 0 auf 100 sich an datei-operationen wagen bei denen auf grund des fehlenden wissens daten-verlust nicht auszuschließen ist halte ich für falsch ...


----------



## MXOR (25. Dez 2011)

So ich habe jetz zum ausprobieren den Code dieser Seite für einen Chat benutzt:

Kaffee & Kuchen - Datenbank-Anbindung mit JDBC

Wie funktioniert das denn genau mit dem Server wo muss ich den hinpacken?? Einfach auf FTP hochladen?


Vielen Dank für die Antworten

Mfg mxor


----------



## Marcinek (25. Dez 2011)

Du brauchst eine JRE 5, 6 oder 7 um ein Java Programm auszuführen. 

FTP ist ein File Transfere Protocol, da kann man nix ausführen.


----------



## MXOR (25. Dez 2011)

Okey dann starten wir erstmal ganz einfach... 

Wenn ich jetz beispielweise einen String von Rechner A nach Rechner B verschicken will... 
Wie geht das?

Also theoretisch brauche ich auf Seite B einen Listener auf einem Port, auf A etwas das an eine IP ein Paket schickt, an den Port, auf dem der Listener horcht... 
Danach einfach Ausgabe in der Konsole...

Ich habe schon rausgefunden das man Sockets benötigt, die für den Datenaustausch verantwortlich sind, bzw. Daten senden sowohl auch empfangen können..

Wie implementiere ich das in Java? Kannst du mir vllt was zusammencoden das ich einen kleinen Anhaltspunkt habe den ich dann ausbauen kann?? Mir fehlt ein bisschen der Einstieg in die ganze Geschichte...

*Zu der anderen Sache:*


> was bei sync-geschichten ganz wichtig : EINE kontrollinstanz welche ALLE daten enthält ... über veränderungen wacht ... daten für andere user sperrt sobald einer daran rumeditiert ...
> 
> alles in allem nicht so einfach ...



Ich habe eigentlich an Statische Daten gedacht die Synchronisiert werden, zum Beispiel sowas wie eine MP3 Datei oder ein Bild... Also Daten die an sich nicht verändert werden...

Zb auf rechner A sind Daten 1,2,3 und auf B 2,4 dann wird einfach 4 auf A und 1,3 auf B verschoben. sodass nach der Synchronisierung auf beiden Rechner alle Daten von 1 bis 4 sind... Vom Konzept :noe:

Danke =)
Mfg mxor


----------



## Marcinek (25. Dez 2011)

Du sollstest dir die Seite, die du gepostet hast durchlesen.

Und einen Schritt nach dem anderen machen.

Versuche ein String von A nach B mittels des Codes da zu verschicken.

Sollte gehen

Gruß,

Martin


----------



## irgendjemand (25. Dez 2011)

@TO
wäre auch mein link zu nem einfachen beispiel gewesen ... aber das hast du ja nun selbst gefunden ...
ansonsten : ganz erlich : wir sind hier nicht wirklich da um dir im privat-unterricht grundlagen beizubringen ... dafür gibt es einsteiger-bücher , google , und leute die man dafür bezahlen muss ... so mal eben nebenbei wird das sicher keiner machen ... und wenn dann nur so dürftig das du vielleicht ein paar hinweise für google erhältst ...

auch wenn sich deine daten nicht verändern brauchst du trotzdem eine kontroll instanz die auch vergleicht ob datei 2 auf pc A auch mit datei 2 auf pc B übereinstimmt ... und damit meine ich nicht nur den namen sondern auch den inhalt *würde hier n hash nutzen* ...
nach dem abgleich sollte dann die kontrollinstanz steuern welche daten von wo nach wo kopiert werden sollen ... die clients nehmen nur die befehle entgegen und führen diese aus ...

was das "für dich zusammenbauen" angeht :
1) du hast auf der seite *zwar keinen aktuellen und schönen ... aber funktionierenden* code mit dem das geht ... *auch wenn hier und da ein paar compiler-warnung auftreten ...*
2) wie viel würdest du für zahlen das sich jemand die mühe macht dir das 1) zu bauen und 2) zu erklären ? oder überleg dir mal : was du von anderen dafür verlangen würdest
3) es bringt dir wenig dich mit 30 zeilen code zu bomen von denen du vielleicht 5 zeilen verstehst ... ich sehe keinen sinn darin anfängern code zu geben mit dem sie nichts anfangen können ...

das du bis zum stichwort SOCKET gekommen bist ist schon mal ein anfang ...
wie wäre es wenn du google weiter damit befragst und nebenbei so 3 oder 4 fachbücher liest ?
ich denke so solltest du eine chance haben auch zu verstehen was du da vorhast ...

auch möchte ich dich schon mal vorher auf probleme aufmerksam machen die bei sowas auftreten können ... z.b. firewall , NAT , packet-loss ... usw ...

es gehört schon etwas mehr dazu das was du da vorhast umzusetzen als nur den bloßen gedanken daran zu haben ...

persönlich empfehle ich dir das du dir erstmal das nötige wissen aneignest anstatt nach code zu betteln den du nicht verstehst ... der grund ist vor allem das du dann bei fehlern selbst hand anlegen kannst und uns nicht weiter damit "belasten" musst ala "habe deinen code genommen -> geht nicht" *mal von abgesehen das GEHT NICHT keine fehlerbeschreibung ist*

ich will dich keines falls von dem projekt abhalten ... aber ich denke doch das wenn man nicht das nötige wissen für ein solches projekt hat erstmal ein paar nummern kleiner anfangen sollte ...

und wenn selbst ein simpler chat *den ich wirklich in müden 30 bis 50 zeilen schreiben würde* zu viel ist ... dann fehlen dir aber ganz gewaltig grundlagen ...


----------



## JanHH (26. Dez 2011)

Überleg Dir erstmal welche Architektur Du haben willst. Wenn es da einen zentralen Server gibt, der auf die User wartet, überleg Dir, ob Du dafür ein eigenes Netzwerkprotokoll bauen willst, oder das ganze einfacherweise mit HTTP machst. Wenn ja (was ich dringend empfehlen würde, a) weils das schon vorgefertigt gibt und b) weils port 80 benutzt, also keine Firewallprobleme zu erwarten sind), überleg Dir, ob Du einen tomcat verwenden willst (der serverseitige Teil der Anwendung also ein servlet wird) oder Du die java-HTTP-Server-Komponente verwenden willst (ich würde allerdings den Tomcat nehmen). Wenn das soweit entschieden ist, lerne wie man Servlets programmiert (ist nicht schwierig). Als nächstes kommt der clientseitige Teil, da würde ich dann die java-Klasse URLConnection nehmen, die einen HTTP-Client implementiert. Mit dieser kann man ziemlich simpel per HTTP-POST Binärdaten (also auch Deinen String) an den Server übertragen. Du hast dann also ein Servlet was die Anfragen entgegennimmt und einen simpel-Client, der einen String an den Server schickt. Das ist doch quasi schon die halbe Miete ;-).


----------

