PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java Chat-Tool, realisierung?



invis-eo
04-12-2003, 15:31
Hallo zusammen
Ich möchte in Java ein kleines Chat-Tool (für zwei Personen im gleichen Netzwerk) programmieren wobei einfach zwei user über das gleiche Programm ohne Server Meldungen aneinander versenden können. Nun da stellt sich für mich (habe noch keine Netzwerkimplementierungen gemacht) die eine oder andere Frage.

Wie können zwei Clients miteinander Kommunizieren? Dass das geht kann ich entweder über die IP-Adresse, benutzername oder PC-Name (Im windows Netzwerk) gehen. D.h. ich muss etwas vom anderen User kennen. Kann ich das Programm so realisieren, dass die software schaut, welcher benutzer mein Programm am laufen hat oder muss ich das manuell konfigurieren? Das ganze soll ohne Server-Software arbeiten.

Des weitere muss ich ja über einen Port gehen, kann ich mir da irgend einen aussuchen oder gibt es vor/nachteile bei bestimmten Ports (also die standart-internetport wie http, ftp, pop, etc werd ich net verwenden)?

Wenn das ganze mal läuft, möchte ich die Software soweit erweitern dass mehrere User dazu connecten können, aber immernoch ohne Server. Geht das irgendwie?

Ich möchte keine fertigen Lösungen da ich das Projekt zum Java lernen implementieren möchte. Ich kann schon C und deshalb ist mir momentan sehr langweilig in der Informatik weil wir nochmals von vorne begonnen haben und ich was haben möchte was mir auch was bringt.


Das ganze soll auf Windows als auch auf Unix-Systemen lauffähig sein, dies sollte allerdings nicht das Problem sein bei Java denke ich mal.

Vielen Dank für eure Hilfe.

peschmae
04-12-2003, 16:29
bischi ist im Moment an so was ähnlichem. Der kann dir wohl auch weiterhelfen.

Zu den Ports: Ausser den Standardports kannst du irgend einen nehmen. Allerdings solltest du auch einen schlauen Mechanismus kreieren, der der auf andere Ports ausweicht, falls ein Lieblingsport besetzt ist.

Allerdings hab ich im Moment gerade keine Idee, wie du (ohne die IPs, zu denen du verbinden möchtest zu kennen), das Netzwerk nach anderen Clients scannen kannst.
Du möchtest ja wohl kaum alle IPs durchprobieren. Und dann für jede IP noch mehrere Ports.

Solange du keine nativen Programme/Libs verwendest ist die Verwendung des Programmes sowohl unter Windows als auch unter Linux kein Problem. (Geht auch aufm Mac :D)

MfG Peschmä

invis-eo
04-12-2003, 16:40
ok, dann werd ich das ganze wohl über die IP's machen müssen. Ich will wirklich nicht alle abscannen. Ports kann ich z.B. einfach 5243 5244 5245 nehmen? werd mir dann mal ein paar aussuchen :-)!

Zur socketprogrammierung, gibt es dazu ein gutes deutsches Tutorial? wenn nicht, muss ich mich halt mit dem von java.sun.com zufrieden geben (ich finds z war ganz gut)? deutsch währe halt schon net schlecht!


dankeschön!

anda_skoa
04-12-2003, 17:24
Original geschrieben von invis-eo
ok, dann werd ich das ganze wohl über die IP's machen müssen. Ich will wirklich nicht alle abscannen. Ports kann ich z.B. einfach 5243 5244 5245 nehmen? werd mir dann mal ein paar aussuchen :-)!


Port brauchst du nur einen :)

Ciao,
_

bischi
04-12-2003, 18:11
1) Ja, ich bin momentan gerade daran, so etwas zu schreiben (wenn ich denn Zeit hätte)

2) Ohne IP oder URL läuft gar nichts - die musst du auf jeden Fall kennen

3) Ohne Server läuft gar nichts - den musst du dir selber schreiben (ca. 200 Zeilen)

4) Port kannst du irgendeinen nehmen (bis zu gewisser mir unbekannter Nummer), einige sind jedoch schon besetzt (kein Problem, dies mit Server herauszufinden)

5) Wenn du mal einen Server hast, können sich beliebig viele Clients einhaken

6) Folgender Link ist nicht schlecht: http://www.pms.informatik.uni-muenchen.de/lehre/seminar/client-server/01ss/Vortraege/RMI/Inhaltsverzeichnis.htm

MfG Bischi

PS: Hab noch einige Probleme, einige sind schon gelöst - Falls du konkrete Fragen hast, ich werde dir versuchen zu helfen :)

tuxipuxi
04-12-2003, 18:21
Original geschrieben von bischi

4) Port kannst du irgendeinen nehmen (bis zu gewisser mir unbekannter Nummer), einige sind jedoch schon besetzt (kein Problem, dies mit Server herauszufinden)


alle ab 1025, die davor sind reserviert, hoch bis 65535.

invis-eo
04-12-2003, 18:28
also wenn ich sowieso einen server basteln muss, dann haue ich den einfach in beide programme rein und man kann dann auswählen ob man server sein will oder obs der andere machen will.

Eine andere Frage, kann ich das ganze auch auf einem Localhost testen? ich hab momentan keinen zugriff auf die anderen computer im netz und muss das ganze was ich implementiere auch irgendwie testen. kann ich da einfach meine eigene IP nehmen an welche er das ganze senden soll? kann ich davon ausgehen wenn er mir was übermittelt dass das ganze korrekt funktioniert?

Ach ja, danke für den link!!!

Danke!

Badsteve
04-12-2003, 18:29
2) Ohne IP oder URL läuft gar nichts - die musst du auf jeden Fall kennen

ich glabe es geht auch ohne, aber dann muss man das ganze mit Broad- / Multicasting machen.

Steve

Badsteve
04-12-2003, 18:29
du kannst es an deinem localhost testen.

Steve

invis-eo
04-12-2003, 18:41
vielen dank, dann werd ich mich wohl schon bald ans implementieren machen :-)!

noch n schönen abend!

bischi
04-12-2003, 18:53
Nimm das Server-Client (siehe Link) Beispiel: Dies läuft sehr gut auf einem Computer!

MfG Bischi

peschmae
04-12-2003, 19:31
nun, klar musst du irgendwo zwischen Server und Client unterscheiden. Sollte aber kein Problem sein.
Der erste spielt dann halt Server und der Rest Clients...

@anda_skoa: Ja, aber wenn der schon besetzt ist...

MfG Peschmä

itsme
04-12-2003, 20:58
Ich habe vor ein paar Jahren als Quick & Dirty Projekt mal einen Java Chat programmiert. Das Teil kann auch z.B. Räume verwalten und Räume mit einem Passwort schützen. Vom Server aus können z.B. User gekickt werden. Allerdings ist das ganze EXTREM schlecht programmiert. Hat nicht sehr viel mit OOP zu tun. Aber wenn du es dir mal ansehen willst, dann kann ich es mal wieder raus suchen...

invis-eo
05-12-2003, 16:51
von OOP hab ich leider noch keine Ahnung (also einfach grundlegend halt), d.h. wir werden es erst noch in der Schule behandeln.

wenn du mir mal deinen chat zusenden könntest, währe das nicht schlecht, dann könnte ich mich mal ein bisschen orientieren und ich hätte sicherlich auch was, wenns Probleme gibt.

fs111
05-12-2003, 18:00
Original geschrieben von tuxipuxi
alle ab 1025, die davor sind reserviert, hoch bis 65535.

schlechte Idee, nimm lieber erstmal einen von den dynamic Ports und keinen von den registered, also irgenwo oberhalb von 33000

fs111

bischi
05-12-2003, 19:07
Dat will heissen?

MfG Bischi

peschmae
05-12-2003, 19:36
das was er sagt. Dass einige Ports halt schon für gewisse Anwendungen vorgesehen sind - z.B. 80 für HTTP, 8080 auch, 631 für Cups, etc.

Ab etwa 33000 seien sie dann nicht an Anwendungen vergeben. Sagt er.
Deutlicher gehts kaum.

MfG Peschmä

fs111
07-12-2003, 11:15
Ich habe mich vertan, die dynamic Ports beginnen erst bei 49152, aber ab da, kannst Du beliebig einen wählen.

fs111

peschmae
07-12-2003, 13:50
das ist dann aber ein recht kleiner Teil - nur 15000 :D

MfG Peschmä

fs111
07-12-2003, 14:47
Original geschrieben von peschmae
das ist dann aber ein recht kleiner Teil - nur 15000 :D

MfG Peschmä

Wenn nicht reicht, kann er ja immer noch ein paar bei der IANA registreren lassen. :D

fs111

peschmae
07-12-2003, 16:15
aber dazu muss er zuerst die app schreiben :)

MfG Peschmä

invis-eo
07-12-2003, 16:50
also dann werd ich mir wohl einen oberhalb dieser Grenze grabschen... vielen Dank für eure Hilfe, es sollte nun eigentlich möglich sein, das ganze zu realisieren!


Dankeschön!

itsme
08-12-2003, 07:31
Ich weiss nicht ob du das Teil noch willst, aber ich haben meinen alten Chat auf den Server geladen. Du kannst den Chat unter www.mystuff.ch/chat.zip herunterladen. Vergiss einfach schnell den Programmierstyle wieder. Der Code hält sich kaum an bestehende Konventionen, ignoriert OOP Regeln und verwendet sehr viele statische Elemente. Viel Spass! ;)

mike

invis-eo
08-12-2003, 11:42
jop, danke für den chat, hab ihn mir mal runtergeladen und werde ihn mal bei gelegenheit anschaun!

danke
lukas

itsme
08-12-2003, 12:40
Ok, er sollte sogar funktionieren...ansonsten melde dich halt mal! ;)

HotSpott
07-10-2004, 14:24
Wuerde mich fuer das Thema auch interesessieren. Darum haenge ich mich mal
hier an.

Wie bekommt man die Verbindung ohne ip und port hin? wie macht das skype oder
overnet? Wenn man Broadcastmessages ueber das netzt schickt wie das afaik dhcp
macht bleiben die doch an fast allem haengen, vom router ueber die firewall. Gibt
es da ein schlaueres Konzept?

Vielleicht ein gutes Tut zur implementierung eines p2p netztes?

Mit welcher Lib kann man unter C++ sowohl fuer linux, windows als auch mac
kompilieren? Ist die SDL da die richtige Wahl oder etwas Overkill, da ja soviel mehr
dran haengt?

Viele Gruesse
HotSpott

anda_skoa
07-10-2004, 18:15
Wie bekommt man die Verbindung ohne ip und port hin? wie macht das skype oder
overnet? Wenn man Broadcastmessages ueber das netzt schickt wie das afaik dhcp
macht bleiben die doch an fast allem haengen, vom router ueber die firewall. Gibt
es da ein schlaueres Konzept?

zB über einen oder mehrere Server, bei dem sich Clients registrieren, oder in dem man von einem bekannten Client ausgeht und jeder Client nach ihm bekannten anderen Clients gefragt werden kann, etc.



Mit welcher Lib kann man unter C++ sowohl fuer linux, windows als auch mac
kompilieren? Ist die SDL da die richtige Wahl oder etwas Overkill, da ja soviel mehr
dran haengt?


SDL würde gehen, oder Qt, wxWidgets, gtkmm, etc, etc, etc (Boardsuche!)

Ciao,
_

peschmae
07-10-2004, 20:09
Vielleicht ein gutes Tut zur implementierung eines p2p netztes?


[Vollkommen überflüssig]
Ja und ich such auch schon lange ein Tut zur Erstellung eines GIMP weil mir dessen GUI nicht so gefällt.
[/Vollkommen überflüssig]

MfG Peschmä

kinnla
08-10-2004, 17:33
Das Problem mit dem Server ist doch wohl, dass man keinen Tomcat laufen lassen möche, weil der viele Resourcen braucht und bei den Standard Webspace-Paketen nicht dabei ist. Aber php ist meistens dabei. Des halb folgende Idee zur Lösung des IP-Problems:

Die HTML-Seite, in welche das Applet eingebettet ist, ist eine dynamische, mit php erstellte. Beim Aufruf der Seite schreibt das php-Skript die IP des Aufrufenden zusammen mit einem Timestamp in eine Textdatei. Diese Textdatei wird vom Applet ausgelesen. Das Applet versucht dann, sich mit allen IPs zu verbinden, die zB innerhalb der letzten Stunde in die Textdatei eingetragen wurden (außer der eigenen IP). Wenn das System eh nur für zwei Leute ausgelegt ist, sollte das nicht zu viel Verbindungs-Overhead ergeben. Das Applet muss natürlich signiert sein.

+++ kinnla