Einfacher Multiuser chat in java

Status
Nicht offen für weitere Antworten.

St@TiC

Neues Mitglied
hallo
ich möchte nen total simplen multiuser chat in java schreiben. mit nem server und nem client grafische oberflaeche und das ganze schöne drumherum ist nicht notwendig. auf konsolen basis reicht aus.

leider hab ich keinen blassen schimmer wie ich das anstellen soll. weiß einer zufällig ein gutes (wenn möglich deutschsprachiges) tutorial wie man sowas macht?
oder zumindest ein gutes nachschlagewerk das socketprogrammierung in java betrifft. damit ich u.u mit viel glück und rumprobiererei was zu stande krieg.

bin für jede hilfe dankbar


P.S. spart euch die antworten "wenn du neuling bist beschäftige dich mit leichteren sachen als gleich mit nem chat"
der meinung bin ich auch aber erklärt das meinem ausbilder, der mir das als übung aufgetragen hat
 

sigma

Mitglied
ich würde es am einfachsten mit udp machen. falls du es noch nie gemacht hast und ein kleines beispiel willst dann kann ich dir ein schicken.

der client schreibt was am server. der server schickt dann per udp eine message das es neue nachrichten hat. die client holen sich das selbständig alles vom server

gruss sigma
 

erdbeerbunny

Neues Mitglied
Hallo,

ich schlage häufig Themen im Buch "Handbuch der Java-Programmierung" von Guido Krüger nach. Das Buch gibts unter www.javabuch.de auch kostenlos als HTML-Version... Da gibts ein eigenes Kapitel Netzwerkprogrammierung mit Beispielen von Client/Server-Programmen... Ich persönlich finds auch einfacher, wenn der Server eingehende Nachrichten einfach an die angemeldeten Clients weiterleitet... Ob Du UDP oder doch TCP benutzt, klannst Du ja immernoch entscheiden :wink:
 

Kerberus

Bekanntes Mitglied
Bin auch gerade am programmieren eines Chat-Programmes. Ich habe eine Socket-Verbindung aufgebaut zum anderen Client, doch geht das nur durch eine IP. Leider sind die meisten IP's heute dynamisch. Wie kann ich das Problem lösen. Bis jetzt funktioniert mein Chat nur im Intranet.
 

Stefan1200

Top Contributor
Gerade mit der Multiuser Geschichte habe ich Probleme. Wie macht Ihr das? Ich bekomme immer nur ein Chat zwischen zwei Leuten hin. Ich bekomme das Server seitig nicht hin, das der Server bei einer einkommenden Nachricht die Nachricht an die anderen Clients weiter sendet. Habt Ihr da mal denkanstöße oder kleine Beispiele für mich?
 

sigma

Mitglied
hab au mal einen chat bzw. einen messenger programmiert.

habe es so gelösst, das ich einen server gemacht habe. alle haben sich auf dem server eingeloggt. so habe ich die ip von den client bekommen. sobald sich ein client eingeloggt hat, habe ich allen onlineclients die ip mitgeteilt. wenn jetzt jemand z.b. a mit b komunizieren möchte, so kennen sie sich gegenseitig weil ich ja die ips der beiden verschickt habe.

gruss sigma
 

nekton

Aktives Mitglied
ich wuerde eine "broadcast" variante vorschlagen. du programmierste einen server der die verbindungen annimmt. diese werden ja im grunde genommen wie filestreams gehalndelt. also braucht man eine logik/klasse die alle filestreams auslist bzw. eine nachricht an alle anderen filestreams sendet.

Code:
+---------------------+      +--------------+     +---------------------+    /               \       +-----------+
|  SocketStream N  | -----|    Logik        |----|  SocketStream M  |---   Netzwerk    --- | client M    |
+---------------------+      +--------------+     +---------------------+    \               /       +-----------+
            |
            |
           ________
         /               \
        |NETZWERK|
         \________/
            |
            |

+------------------+
| Client N            |
+------------------+

1. client verbindet sich mit socket
2. bei anfrage erstellt der server einen object "SocketStream", welches eine verbindung zur logik
    klasse "Logik" hat.
3. client sendet nach erfolgreicher verbindung den text "foobar" an den Server.
4.  SocketStream empfaengt "foobar" und leitet den eingegangenen text an die Logik.
5. die logik sendet den text an jeden seiner clients

ich weiss nicht ob das jetzt richtig ruebergekommen ist, aber wichtig ist es bei diesem model, das jeder serversocket seine angaben an eine zentrale instanz weitergibt, welche wiederum jeden einzelnen socket mit den entsprechenden daten (in richtiger reihenfolge) versorgt.

das model ist recht grob und ungepfeilt, aber es soll nur den etwaigen ablauf verdeutlichen.
 

Stefan1200

Top Contributor
nekton hat gesagt.:
ich weiss nicht ob das jetzt richtig ruebergekommen ist

Leider habe ich das jetzt nicht verstanden. Wie laufen deine Clients denn?
Jeder Client läuft in einem eigenen Thread?
Wenn ja, wie komme ich dann an diese Thread wieder heran?
Ich kann ja nicht von jeden Client eine instanz speichern, oder muss ich das?
Ich stelle mir jetzt ein Server mit 10000 Client vor, ich kann ja nicht 10000 Input/Output Streams oder Threads speichern, oder? Jedenfalls klingt das nicht gerade performant.
 

Kerberus

Bekanntes Mitglied
An Sigma: Wie kriegst du die IP? Gibt es einen Java-Befehl der das kann?
Ich habe zwar ein Programm geschrieben um die IP zurück zu liefern, aber es gibt immer 127.0.1 aus, egal auf welcher Maschine.
Es stellt sich auch noch folgendes Problem. Die meisten User habe heutzutage einen Router, so auch ich. Wie kann ich die IP von einer Person erfahren wenn diese hinter einem Router sitzt.
 
R

Roar

Gast
@kerberus:
Code:
Enumeration ifaces = NetworkInterface.getNetworkInterfaces();
while (ifaces.hasMoreElements())
{
    NetworkInterface ni = (NetworkInterface)ifaces.nextElement();
    if(ni.getName().equals("ppp0"))
    { // für ppp
        Enumeration addrs = ni.getInetAddresses();
        while (addrs.hasMoreElements())
        {
            InetAddress ia = (InetAddress)addrs.nextElement();
            System.out.println("Host: "+ia.getHostName());
            System.out.println("IP: "+ia.getHostAddress));
        }
    }
}
ich hab auch lange gebraucht um das rauszukriegen

@edit: Code besser lesbar gemacht / Stefan1200
@edit: War ja auch nur schnell aus meinem Webserver kopiert, sorry ;) / Roar
 

St@TiC

Neues Mitglied
ok ich werde mich jetzt erstmal etwas dran setzten war die letzten tage etwas verhindert.
java-buch.de da will mein rechner ne datei downloaden aber net die seite anzeigen...
ich sag schonmal danke für die hilfe
 

nekton

Aktives Mitglied
Stefan1200 hat gesagt.:
Leider habe ich das jetzt nicht verstanden. Wie laufen deine Clients denn?
Jeder Client läuft in einem eigenen Thread?

so gesehen /und tatsaechlicher weise ;)) ja, da der "client" ein eigenes programm darstellt, welches (in der regel) auf einem ganz anderen system laeuft . der browser ist ein client und der server wo das java-forum drauf liegt eben der server der sockets haendelt und die logik dahinter die die daten rausrueckt (vereinfacht gesehen).

Wenn ja, wie komme ich dann an diese Thread wieder heran?
Ich kann ja nicht von jeden Client eine instanz speichern, oder muss ich das?

die hast in der logik (dessen instanz genau einmal existiert) ein array/vector/liste von socketverbdingunen, die eingehende informationen an die logik weiterleiten. diese schreibt dann die daten an jede "verbindung" die sich in der liste befindet.


Ich stelle mir jetzt ein Server mit 10000 Client vor, ich kann ja nicht 10000 Input/Output Streams oder Threads speichern, oder? Jedenfalls klingt das nicht gerade performant.

es gibt sicherlich andere ansaetze, aber im endeffekt ist das das schicksaal eines echtzeit-servers. jeder client sollte (solange es eine globale nachricht ist) ueber die selben daten verfuegen. also muss die logik ueber die liste loopen und jedem einzelnen infomationen schicken.

ich koennte mir da allerdings andere ansaetze denken, so wie einen message cache, der ganz nach datenbank manier auf angfrage, alle vorhandenen nachrichten eines zeitraums wiedergibt. aber das hat unter umstaenden nicht viel von wirklicher echtzeit.

bisweilen wenn man 10000 clients haendeln soll, stellt sich mir da allerdings die frage, ob man dann nciht lieber einen "clusterfaehigen" service programmieren sollte. das sieht bei den kollegen in den irc netzen auch nciht anders aus denke ich. das ist schon ein verdammt hohes datenvolumen das es dort zu bewaeltigen geht, und wenn ich erlich sein soll, denke ich das dabei ein normales 100 MBit netzwekr auch so langsam probleme bekommen wuerde, da die frequence einfach zu hoch waere.

wohingegen wenn man dieses clustering betreiben wuerde, und pro server z.b. 99 clients + 1 serververbindung legt sich die lage doch entspannen wuerde.

mir wuerden diverse ansaetze einfallen aber der obige ist einfach der trivialste ;)
 

Stefan1200

Top Contributor
nekton hat gesagt.:
Code:
	for (i=0; i<connections.size(); i++)
	{
		you = (connection) connections.elementAt(i);
		you.out.println(msg);
	}

btw. ist das auch nciht sehr viel anders, als ich oben versucht habe zu erklaeren ;)

Hmm, genau diese Zeilen mit dem Typecasting werfen bei mir ein StackOverflowException. Hat jemand eine Idee?
 

HeyMan

Mitglied
Es kommt vielleicht etwas spät, aber ich würd das alles mit Servlets (Serverseitig) und Http(s)Connection (Clientseitig -Applet/Applikation) machen. Vorteil: Ich kann auch über Firewalls hinaus kommunizieren und ich habe bereits ein spezifiziertes Kommunikationsprotokoll auf dem ich aufbauen kann.
Ablauf:
Auf dem Client läuft ein kleiner Thread, der das Servlet alle ??? milliseks per get abfrägt.
Das Servlet liest bei post request die mitgelieferte message (meine chateingabe) ein und speichert sie in einem log-file.
Dieses logFile wird vom Servlet als ausgelesen und verschickt, bzw. kann auch als File direkt verschickt werden und die Applikation liest dann die Zeilen aus..... je nach Performance kann man es ja so oder so machen.




WebServer <-----PORT 80/443-------<---GET-------
....SERVLET ---------RESPONSE (logfileinhalt)---------> APPLIKATION
.......|................................................................... Thread -> GET
...... |
...... | <-----<POST (Message) ---------------------------
...... |FileIiOutputStream
...... |---------- RESPONSE (neuer logfileinhalt) ------>
LogFile
-------------


gruß heyman

PS:_ sorry...wie gesagt ist vielleicht etwas spät.
 
C

cello

Gast
Hallo,

es gibt eine API die das SIP implementiert (Session Initiating Protocol). Für die Programmierung des Clients kann man die JAIN-Implementierung benutzen. Als Server kann man den SER (Sip Express Router) benutzen.
Ist vielleicht etwas mühselig sich da einzuarbeiten, aber wenn man sich ernsthaft mit IM oder VoIP beschäftigt, lohnt es sich auf jeden Fall.

Viel Spaß, (V\arcel

API/JAIN

Jain-Implementierung

Server

SER
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Einfacher Server funktioniert nicht Netzwerkprogrammierung 1
A Socket Wie ein einfacher Multithreads Service mit Telnet als Client mit Observable/Observer gelöst.... Netzwerkprogrammierung 0
B Einfacher Server mit Jetty Netzwerkprogrammierung 3
F RMI einfacher Chat - Callbacks(?) funktionieren nicht Netzwerkprogrammierung 7
D Apache CXF, JAX-WS Problem bei Arrays - einfacher Server Netzwerkprogrammierung 2
S Socket Einfacher filetransfer Netzwerkprogrammierung 10
B Einfacher Proxy Server Netzwerkprogrammierung 29
M Socket Probleme mit einfacher Socketverbindung Netzwerkprogrammierung 3
L einfacher server ohne threads Netzwerkprogrammierung 4
P Einfacher Server/Client Netzwerkprogrammierung 5
L Einfacher Proxy-Server Netzwerkprogrammierung 6
A einfacher Transfer mit Applets Netzwerkprogrammierung 4
C Einfacher Filedownload mit Sockets geht nicht für pdffiles Netzwerkprogrammierung 16
T Einfacher Servlet-Server Netzwerkprogrammierung 8
antonbracke Multiuser Software über XMPP Server Netzwerkprogrammierung 1
P Java Multiuser Chat hohe Systemauslastung Netzwerkprogrammierung 24
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
L Chat Fenster Netzwerkprogrammierung 1
J Socket Ein Chat Server Tutorial Netzwerkprogrammierung 8
S Java Chat Server Netzwerkprogrammierung 8
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
P Chat in Java Netzwerkprogrammierung 3
C Java Chat Admin Kenzeichnung Netzwerkprogrammierung 14
D Chat Server/mehre Client Netzwerkprogrammierung 9
Androbin Socket Fehlerhafter Applet-Chat Netzwerkprogrammierung 12
C Microsoft Comic Chat Netzwerkprogrammierung 0
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
O Chat (Server) sendet an verschieden Benutzer. Netzwerkprogrammierung 10
J Chat programmieren Netzwerkprogrammierung 12
L Chat Server programmieren Netzwerkprogrammierung 10
TheJavaKid Webcam-Chat im Applet (ChatRoulette Klon) Netzwerkprogrammierung 10
H Socket Java Chat - Verbindung zum Server fehlgeschlagen. Netzwerkprogrammierung 5
K Socket Chat-GUI eigenes Event nach Empfangen Netzwerkprogrammierung 2
K chat Netzwerkprogrammierung 13
L Socket Chat funktioniert nicht Netzwerkprogrammierung 2
T Socket Java Chat Netzwerkprogrammierung 2
xDarkSunx Chat JFrame Netzwerkprogrammierung 3
xDarkSunx Hilfe Chat Login Netzwerkprogrammierung 7
E JAVA Chat Netzwerkprogrammierung 19
C Java Chat funktioniert nicht richtig Netzwerkprogrammierung 6
I Chat-Client empfängt nichts vom Server Netzwerkprogrammierung 3
A Socket UDP Chat Verbindungsproblem im WWW (Server sendet ins leere) Netzwerkprogrammierung 11
A Multi-User-Chat Netzwerkprogrammierung 2
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
E Userliste für Chat Applet Netzwerkprogrammierung 4
L Socket Chat Server für mehrere Clients Netzwerkprogrammierung 7
J Framework/ Muster für Chat-ähnliches Programm gesucht Netzwerkprogrammierung 2
AMStyles Client Server basierter Chat Netzwerkprogrammierung 7
M chat als applet umgeschrieben - unbekannter fehler :( Netzwerkprogrammierung 2
P Socket Chat selbst bauen + Multiusereditor Netzwerkprogrammierung 13
T Java Chat über UDP Netzwerkprogrammierung 7
Developer_X Habe fragen zur Chat Programmierung Netzwerkprogrammierung 4
D Hilfe ich komme bei meinem UDP chat Server nicht mehr weiter Netzwerkprogrammierung 9
B Die alte Leier: "Chat" Netzwerkprogrammierung 3
M chat funktioniert nicht (Connection refused: connect) Netzwerkprogrammierung 3
R Java-Chat-Applet funktioniert nur in Eclipse Netzwerkprogrammierung 3
S Client-Server Chat Problem nur im lokalen Netztwerk Netzwerkprogrammierung 23
DamienX Chat Socketserver/Client. wo ist das Problem? Netzwerkprogrammierung 2
J Client-Client-Chat ohne Serverbeteiligung Netzwerkprogrammierung 2
A Wichtig für einen Chat? Netzwerkprogrammierung 4
S Java Applet Chat Grundsatzfrage Netzwerkprogrammierung 6
R Java Chat über Inet connecten Netzwerkprogrammierung 3
F Chat Programm. Verständnisfrage while-Schleife Netzwerkprogrammierung 7
P Probleme bei Chat programm Netzwerkprogrammierung 2
C Voice Chat Netzwerkprogrammierung 3
G FAQ Chat geht nicht ? Netzwerkprogrammierung 4
T Schriftfarbe im Chat ändern Netzwerkprogrammierung 2
G ActionEvent klappt beim Chat nicht Netzwerkprogrammierung 5
J Kleines Problem mit Chat Server Netzwerkprogrammierung 2
T Chat-Client Netzwerkprogrammierung 12
G Chat zwischen applets: möglich? Netzwerkprogrammierung 2
T Chat mit mehreren Clients Netzwerkprogrammierung 3
C Chat , Streamproblem, PumpingException, Danke Netzwerkprogrammierung 2
S RMI Chat Problem, Client bekannt machen Netzwerkprogrammierung 2
V probleme mit dem chat programm Netzwerkprogrammierung 4
K Lokaler Chat Netzwerkprogrammierung 5
S Chat aufs Internet ausweiten Netzwerkprogrammierung 5
J Router behindert Chat Netzwerkprogrammierung 9
S Knuddels Chat System: Bot / Nachrichten verschicken? Netzwerkprogrammierung 6
G Chat - was brauch ich Netzwerkprogrammierung 2
André B. Brauche Hilfe bei Chat Netzwerkprogrammierung 6
K Problem mit "Chat" Netzwerkprogrammierung 2
N Java-Chat (lauffähig) macht Probleme auf der Konsole Netzwerkprogrammierung 6
Paule Acces denied bei Chat Netzwerkprogrammierung 6
B Multi-chat Problem Netzwerkprogrammierung 3
N Java Chat-Problem Netzwerkprogrammierung 4
G Java Chat mit HTML Cleint Netzwerkprogrammierung 3
G Chat Programm - was ist los? Netzwerkprogrammierung 9
A server mit 2 Ports : Mit und ohne SSL Chat system Netzwerkprogrammierung 10
Z chat: wann http und wann sockets verwenden? Netzwerkprogrammierung 11
M Socket Verbindungen für einen Chat Netzwerkprogrammierung 10
R Mini-Chat löst BindException aus Netzwerkprogrammierung 7
F Multiclient Chat Netzwerkprogrammierung 12
K Chat: Nur 1 Verbindung zum Server möglich :( Netzwerkprogrammierung 6
K Chat: Verbindung kommt nicht zu stande Netzwerkprogrammierung 6
S JAV07P SGD client/server chat Netzwerkprogrammierung 4
C IRC CHAT auslesen -> Sockets/input und output Streams Netzwerkprogrammierung 9

Ähnliche Java Themen

Neue Themen


Oben