myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   Java Chat Programm OHNE Server (https://mygully.com/showthread.php?t=2292384)

counterfighter3 27.04.11 14:08

Java Chat Programm OHNE Server
 
Hallo zusammen,

ich habe mir vorgenommen einen Java Chat zu programmieren. Habe mich bisher immer ein wenig vor dem programmieren gescheut, will mich aber mal ran wagen um mein Wissen dahingehend zu erweitern.

Ich habe schon des öfteren in C programmiert und in Java, jedoch nur so Kleinigkeiten aus der Schule. Auch habe ich schon eine Menge gelesen über Sockets und Server CLient Betrieb. Ich finde das ist für die spätere Anwendung zu kompliziert.

Ich würde gerne ein Chat programm schreiben welches automatisch über LAN arbeitet ohne eine Server und eine Client Seite zu haben.

Habt Ihr villeicht ein paar Ratschläge?

Danke im Voraus

Xalir 27.04.11 15:10

Du scheinst falsche Vorstellungen von Netzwerkprogrammierung zu haben. Beim Austausch von Daten gibt es immer mindestens einen Sender(der Client) und einen Empfänger(der Server). Ein Chatprogramm ist typischerweise beides, der sowohl Daten empfängt als auch Daten sendet.

testerws 27.04.11 18:07

hä? wie soll das gehen? ich habe bisher nur ein chat in c# (winform) geschrieben, aber wie soll ein chat ohne client UND server aussehen? bin für neue wege/ideen immer offen

PornoFan 28.04.11 11:53

Ohne Server?

Dann solltet ihr eventuell Briefe austauschen...

germgerm 28.04.11 17:06

Zitat:

Zitat von counterfighter3 (Beitrag 22203911)
Ich würde gerne ein Chat programm schreiben welches automatisch über LAN arbeitet ohne eine Server und eine Client Seite zu haben.

Du könntest ein Netzlaufwerk x: einrichten und dann mit deiner Form mit dem Send-Button ein File x:\chat-username.txt schreiben.
Und zyklisch alle anderen Files einlesen und mergen.

PornoFan 28.04.11 19:01

Zitat:

Zitat von germgerm (Beitrag 22209144)
Du könntest ein Netzlaufwerk x: einrichten und dann mit deiner Form mit dem Send-Button ein File x:\chat-username.txt schreiben.
Und zyklisch alle anderen Files einlesen und mergen.

Und das Netzlaufwerk existiert einfach so ohne Server?
Ist ja interessant...

Pennywise1911 11.05.11 17:16

Ich glaube er meint, dass er keine Hardware als Server abstellen will. Die einzige Möglichkeit ist, dass du in deiner Anwendung 2 Klassen hast. Einmal Server und einmal Client. Der Typ, der Verbinden möchte, ist also der Client und fragt beim Server nach, ob man Verbinden darf. Wenn der User das mit "Ja" beantwortet, wird der Server in dieser Applikation gestartet. Somit hast du das Client/Server-Modell in einer Applikation unter gebracht.

sirleo 11.05.11 22:15

@Threadersteller:
Wenn du keinen Server hast hast du auch keinen Client, denn der Client ist per definition ein Programm welches Dienste von einem Server in Anspruch nimmt.

Du hast hier im Grunde 2 Möglichkeiten:
1. Du gibst die IP des PC's per Hand ein, Vor allem clever wenn in dem Lan statische IP's vergeben werden.
2. Du sendest deine Nachricht als Broadcast an alle PC's.

Andere möglichkeiten hast du nicht, denn sonst können sich die Chatprogramme ja nicht finden.
In den früheren Zeiten von ICQ, sendeten die Clients auch immer direkt zueinander,heute machen sie es nur ncoh bei Dateitransfers,damals waren die Server auch nur zum finden der Clienten.
Das man das nun alles zentralisiert hat hat verschiedene Gründe.

btw, wiso soll kein Server vorhanden sein, hat das bestimmte Gründe oder so aus Prinzip?
so long

das_kindlein_schreit 11.05.11 23:12

Zitat:

Zitat von sirleo (Beitrag 22262032)
Andere möglichkeiten hast du nicht, denn sonst können sich die Chatprogramme ja nicht finden.

Wieder mal grober Schwachsinn - Broadcasts wären zwar eine gute Idee, sind aber keineswegs notwendig. Eine Kenntnis über alle verbundenen Clients im LAN kriegt man auch so - das ist auch implizit in der Technologie drin, auch wenn die physischen Signaländerungen am Switch nicht unbedingt weitergegeben werden. Man muss im Grunde entweder einen Portscan durchführen (das geht völlig legitim und kontrolliert) oder einfach auf vordefinierte Ports zugreifen - ob TCP oder UDP ist in einem normalen LAN egal, Paketverluste treten eh kaum auf (man sollte aber trotzdem Checksummen mitübertragen wenn es UDP sein soll, auch das geht praktisch Overhead-frei). Wenn es denn komplett ohne serverartige Algorithmen gehen soll dann nutzt man einfach nen Hub statt einem Switch (nicht unbedingt eine tolle Lösung ...) - oder man stellt auf Token Ring um, da bekommt man auch erstmal alle Pakete ;)

Wie bereits angedeutet muss man einfach nur an beiden Seiten einen Port permanent abhören und ggf. antworten - schon hat man das, was man durchaus auch als serverfreie Kommunikation bezeichnen kann denn keine zentrale Instanz regelt mehr als einen einzigen Datenfluss.

sirleo 11.05.11 23:33

Nein ehrlich, währ ich nicht drauf gekommen, Server und Client reden ja auch so miteinander.

Was ich meinte war:
Du musst ja erstmal deinen Chatpartner finden, oder halt ein Megafon nehmen udn es in die Welt hinausbrüllen.

Und von wegen Grober schwachsinn:
Ich will mal sehen wie du bei dir zu hause einen Token Ring aufbaust, dann doch eher einen EthernetTokenRing, und dann muss man ja noch einiges beim Aufbau eines Tokenringes beachten.
Deine Vorschläge sind so unpraktisch das die wirklich grob schwachverfugt sind mein lieber.
und was soll das gedöns mit der Signaländerung am Switch?
Natürlich wird diese weitergegeben, und auch bei einem Broadcast, sonst funktioniert ja gar nichts.
Und von wegen TCP oder UDP, macht schon unterschied, bei UDP musst nähmlich ggf die Payload nochmal selbst wieder zusammenbauen.
Und von wegen Checksum selbst mitübertragen.
Hier lies mal bevor du geistig einen Abseilst [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]
Und ein Portscan ist schon knorke ehrlich:
Man will ja auch jedes mal einen Scan durchführen bevor man ein bisl chattet, zumal einige Clients im LAN ja auch Firewalls haben.
Aber du erstaunst mich schon trotzdem:
Ich bewundere wie du morgens aufstehst und es schaffst den tag zu überleben.
*kopfschüttel*

Xalir 12.05.11 01:30

Zitat:

Zitat von sirleo (Beitrag 22262032)
@Threadersteller:
Wenn du keinen Server hast hast du auch keinen Client, denn der Client ist per definition ein Programm welches Dienste von einem Server in Anspruch nimmt.

Die Definition ist zwar richtig, die Schlußfolgerung aber falsch. Ein Client kann auch ohne Server existieren, aber ohne einen Server nicht ordnungsgemäß arbeiten.

Zitat:

1. Du gibst die IP des PC's per Hand ein, Vor allem clever wenn in dem Lan statische IP's vergeben werden.
2. Du sendest deine Nachricht als Broadcast an alle PC's.
Zu 1. Anstatt einer IP-Adresse ist der Hostname weitaus flexibler und zudem auch für den Benutzer einfacher.
Es gibt noch die Möglichkeit über Multicast (dies nutzt zum Beispiel IRC)

Zitat:

Man muss im Grunde entweder einen Portscan durchführen (das geht völlig legitim und kontrolliert) oder einfach auf vordefinierte Ports zugreifen
Ein Portscan ist für ein Chatprogramm völlig überflüssig, egal ob man sich für eine Implementierung von dynamischen oder festen Ports entscheidet. Für die Suche ist Broadcast der effektivste Weg.

Zitat:

Paketverluste treten eh kaum auf (man sollte aber trotzdem Checksummen mitübertragen wenn es UDP sein soll, auch das geht praktisch Overhead-frei)
Irrtum, TCP und UDP senden beide Checksummen, der Unterschied ist ganz woanders. Und für textbasierende Chats bedient man sich immer TCP, ohne Wenn und Aber. Ansonsten sollte man nochmal anfangen, die Grundlagen von Netzwerkkommunikation zu lernen.

sirleo 12.05.11 10:23

Hi!
Ja Mutlicast wäre Stilsicherer.
Mein Gedanke dahinter war aber das ich die Nachricht ins Broadcastpacket packe und die Programme dann nach Broadcastpacketen suchen lasse.
Die PC-Namen hab ich jetzt total vergessen ;).
mfg

P:s.:sei doch nicht so pedantisch was meine Schlussfolgerung angeht :D

Twaddler 12.05.11 12:27

Ich glaube eher, dass der Threadstarter sich erstmal etwas grundlegender mit dem Thema Java auseinandersetzen sollte bevor er so etwas nur versucht. Außerdem sollten er und einige andere Leute sich mal überlegen, wie ein Chat funktioniert und wie man den Server weglassen soll.

[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

Der Hauptfehler ist anscheinend das Verständniss eines Servers als ausschließlich externe Hardware.

LG

das_kindlein_schreit 12.05.11 13:03

Zitat:

Zitat von sirleo (Beitrag 22262280)
Und von wegen Grober schwachsinn:
Ich will mal sehen wie du bei dir zu hause einen Token Ring aufbaust

Schön.

Zitat:

Zitat von sirleo (Beitrag 22262280)
Deine Vorschläge sind so unpraktisch das die wirklich grob schwachverfugt sind mein lieber.

Ich bin nicht "dein lieber", Kindchen.

Zitat:

Zitat von sirleo (Beitrag 22262280)
und was soll das gedöns mit der Signaländerung am Switch?

Das fragste am besten mal deinen Lehrer, der erklärt dir dann u.A. auch was ein Stromkreis ist und was das mit nem Netzwerk zu tun hat.

Zitat:

Zitat von sirleo (Beitrag 22262280)
Natürlich wird diese weitergegeben, und auch bei einem Broadcast, sonst funktioniert ja gar nichts.

Und danach fragste ihn was ein Hub, ein Switch ist und wie er funktioniert, hast offensichtlich noch sehr, sehr viel zu Lernen.

Zitat:

Zitat von sirleo (Beitrag 22262280)
Und von wegen TCP oder UDP, macht schon unterschied, bei UDP musst nähmlich ggf die Payload nochmal selbst wieder zusammenbauen.

Danach : Netzwerkprotokolle, eventuell auch grundlegende Begrifflichkeiten wie "Payload" deren Bedeutung du noch nicht kennst.

Zitat:

Zitat von sirleo (Beitrag 22262280)
Aber du erstaunst mich schon trotzdem:
Ich bewundere wie du morgens aufstehst und es schaffst den tag zu überleben.
*kopfschüttel*

Schön, Teil2.

Zitat:

Irrtum, TCP und UDP senden beide Checksummen
königlich blamiert. Tip, bevor du loslegst : lies den Wiki-Artikel ganz genau
[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

Xalir 12.05.11 17:18

Ein wenig dünnhäutig, der Kleine. Aber wen wunderts, hat doch jemand es tatsächlich gewagt, ihn seinen geistigen Dünnschiss vor die Nase zu führen. Keine Sorge, ich schick' Deine Mama heute Abend mal etwas eher heim, damit sie Dir noch eine Gute-Nacht-Geschichte vorlesen kann und Du beruhigt einschlafen und den grausamen Tag vergessen kannst.

Bis dahin quäle Dich mit der Tatsache, dass Du nur sehr geringes Wissen über Netzwerke und deren Protokolle hast.

Pennywise1911 12.05.11 17:38

Ist euch vielleicht mal in den Sinn gekommen, dass ich recht habe und er sich einfach nur falsch ausgedrückt hat? Bonjour ist BTW sowas wie ein "automatisches finden". Alle Clients schreien rum und finden sich dann. Kann man sicher auch in Java benutzen.

das_kindlein_schreit 12.05.11 18:49

Zitat:

Zitat von Xalir (Beitrag 22264594)
Ein wenig dünnhäutig, der Kleine. Aber wen wunderts, hat doch jemand es tatsächlich gewagt, ihn seinen geistigen Dünnschiss vor die Nase zu führen. Keine Sorge, ich schick' Deine Mama heute Abend mal etwas eher heim, damit sie Dir noch eine Gute-Nacht-Geschichte vorlesen kann und Du beruhigt einschlafen und den grausamen Tag vergessen kannst.

Bis dahin quäle Dich mit der Tatsache, dass Du nur sehr geringes Wissen über Netzwerke und deren Protokolle hast.


Merkst garnicht wie sehr du dich blamierst, oder? Entweder kopierst du nur noch 1:1 mein Verhalten und meine Worte oder du demonstrierst dein Alter. Aktuell : Kopieren bis der Arzt kommt. Lass einfach gut sein, du hast dich hier im Forum nun schon mehrfach lächerlich gemacht - mach es ned noch schlimmer, schon die Tatsache dass du bei jeder Blamage nur noch angreifst und keine Argumente bringst bestätigt das; is doch völlig in Ordnung wenn du was nicht weisst.

Zitat:

is dahin quäle Dich mit der Tatsache, dass Du nur sehr geringes Wissen über Netzwerke und deren Protokolle hast.
Jo dann quäl mal ... bist ja auch ein "Quäler".

Xalir 12.05.11 19:39

Schließe ncht von Dir selbst auf andere.

ckjthedogmaster 12.05.11 20:08

Vllt. solltet ihr beide das per Pm klären. Das Beleidigen bringt euch beiden rein garnichts, ausser vllt. das ihr mal in Urlaub geht.
Denkt mal drüber nach... Ausserdem ein Klick und das Rumgepöbel wird gelöscht.

Mfg

das_kindlein_schreit 13.05.11 14:24

na dann klick mal. Scheint dir ja sehr wichtig zu sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:09 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.