Hilfe bei Chatprogramm

Status
Nicht offen für weitere Antworten.

eQui

Mitglied
hallo,

erstmal: das ist mein erstes programm das im netzwerk agiert also bitte keine all zu komplizierten sachen antworten.
es gibt einen input- und einen outputstream. chatten an sich funktioniert, allerdings würd' ich noch gerne eine liste realisieren, in der man sieht wer gerade online ist. ich dachte an ein string-array, dass der server dann immer an alle clienten mitschickt. allerdings weiß ich nicht wie ich das konkret verschicken soll und wie der client es von einer herkömmlichen chatnachricht unterscheiden kann.

ein paar ideen wären sehr interessant, falls jemand nähere informationen zum programm benötigt:
ich habe dieses tutorial verwendet , inzwischen aber schon einige sachen abgeändert.

LINK

gruß, equi
 
ich mache es folgendermaßen:
bei mir werden die nachrichten in einer ganz bestimmten syntax versandt:
wenn sich ein socket anmeldet, verschickt er unter anderem die nachricht "nick:#:EigenerName" im entsprechenden server-socket-thread, wird das wie folgt behandelt:

...
Code:
String[] hilf;

try{
    hilf=eingang.split(":#:");
}catch(PatternSyntaxException e){}
if(hilf[0].equals("nick")){
    verteiler("userplus:#:"+hilf[1]);
}


im socket der clients wird das wie folgt analysiert:

Code:
String[] hilf;

try{
    hilf=eingang.split(":#:");
}catch(PatternSyntaxException e){}
if(hilf[0].equals("userplus")){
    userPanel.addUser(hilf[1]);
}

der client könnte zum beispiel den string "userliste:#:eigenername" versenden und der der serversocket prüft, wenn er die usernamen in einer hashtabelle namens USER gespeichert hat
Code:
if(hilf[0].equals("userliste")){
    String str="userliste:#:";
    try{
        for(Enumeration e = clients.keys();e.hasMoreElements();){
	str=str.concat((String)e.nextElement());
        }
    }
    catch(Exception e){}
    senden("eigenername",str);
}
und der client analysiert:

Code:
if(hilf[0].equals("userliste")){
    try{
        for(int i=1;i<Array.getLength(hilf);++i){
	userPanel.addUser(hilf[i]);
        }
    }
    catch(IllegalArgumentException e){}
  
}


normale nachrichten haben bei mir die form:

txt:#:EigenerName:#:adressat:#:nachricht
der server prüft in derselben "dekodier-methode"
Code:
if(hilf[0].equals("txt")){
    if(hilf[2].equals("all")){
        verteiler(hilf[1]+ "sagt: "+hilf[3]);
    }
    else{
        if(isClient(hilf[2])){
            senden(hilf[2], hilf[1]+" flüstert: "+hilf[3]);
        }
    }
}

[Edit by Beni: Codetags!] Danke Beni - ich wußte nicht, wie das mit den code-tags geht
 

Dante

Bekanntes Mitglied
hi,

das sieht garnicht so schlecht aus, ein paar anmerkungen aber noch:

- vertraue keinen usereingaben. Hier muss jede Zeile die vom Client kommt als Eingabe betrachtet werden, da garnicht klar ist, welcher Client benutzt wird., Und da sich Clients NICHT immer so verhalten müssen wie wir das gerne hätten, müssen Eingabven immer überprüft werden.

- Du solltest also eine richtige Grammatik für dein protokoll festlegen. Sprich welche Nachrichten gibt es. Welche Felder haben diese Nachrichten. Welche Zeichen dürfen die Felder enthalten.

- Du brauchst nur ein Trennzeichen, nicht drei. Doppelpunkt reicht aus.

- Überprüfe am besten ob eine Nachricht *genau* die Anzahl an Feldern hat, die du erwartest. So stellst du auch sicher, dass da keine Trennzeichen im Benutzernamen oder so verwendet werden.

- Soll allgemeiner Text übertragen werden, also etwas wo das Trennzeichen drin vorkommen darf, lege das Feld ans Ende der Nachricht und parse die Nachricht mit dem Wissen, dass dies das letzte Feld ist und in diesem Feld keine Trennzeichen beachtet werden.

Das ist in etwa die Vorgehensweise, welche das IRC-Protokoll benutzt und das funktioniert ja ganz gut :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Brauche hilfe bei Projekt: Netzwerk Chatprogramm Netzwerkprogrammierung 12
J Objekt mit RSA und AES verschlüsseln und entschlüsseln HILFE Netzwerkprogrammierung 4
T Brauche Hilfe beim GET-String für HttpURLConnection Netzwerkprogrammierung 4
platofan23 Socket Hilfe mit Socket Thread und ArrayList Netzwerkprogrammierung 6
V Kann man mit Hilfe eines Java-Programms den Zugriff auf bestimmte Internetseiten verhinden? Netzwerkprogrammierung 3
C JSON, API ... Anfänger braucht eure Hilfe Netzwerkprogrammierung 10
KingSquizzi3 Website parsen mit Hilfe von jsoup funktioniert nicht Netzwerkprogrammierung 3
J Hilfe beim programmiern einer App zur Anmeldung im Wlan-Netzwerk Netzwerkprogrammierung 0
B JKS erstellen bitte um hilfe Netzwerkprogrammierung 1
R Hilfe bei FTP Netzwerkprogrammierung 7
D HTTP Bräuchte hilfe mit Http Requests Netzwerkprogrammierung 6
R Benötige Hilfe bei Routereinstellungen Netzwerkprogrammierung 7
E RMI RMI - Brauche Hilfe? Netzwerkprogrammierung 7
xDarkSunx Hilfe Chat Login Netzwerkprogrammierung 7
K Datenübertragung UDP Hilfe ????? Netzwerkprogrammierung 5
H Hilfe bei multiplen Clients Netzwerkprogrammierung 7
N Client - Server kurze Hilfe bitte Netzwerkprogrammierung 2
T IP Adresse mit Hilfe der MAC Adresse ermitteln Netzwerkprogrammierung 3
D Hilfe ich komme bei meinem UDP chat Server nicht mehr weiter Netzwerkprogrammierung 9
D Hilfe, meine HttpURLConnection hängt manchmal. Netzwerkprogrammierung 9
TRunKX Hilfe beim senden und empfangen Netzwerkprogrammierung 2
André B. Brauche Hilfe bei Chat Netzwerkprogrammierung 6
D Netzwerk Game, bitte hilfe. Netzwerkprogrammierung 2
N JMS Newbie braucht hilfe Netzwerkprogrammierung 6
S Noob braucht dringend hilfe bei ftp-client Netzwerkprogrammierung 2
J Chatprogramm Netzwerkprogrammierung 25
D Chatprogramm zwischen zwei ChatClients (aktiv/passiv) Netzwerkprogrammierung 1
S User im Chatprogramm verschiedene Farben Netzwerkprogrammierung 1
K Chatprogramm - Server funktioniert nicht Netzwerkprogrammierung 5
S Java-Chatprogramm via Console Netzwerkprogrammierung 4
Z Socket [Chatprogramm] Mehrere Clients an einen Server Netzwerkprogrammierung 10
A Chatprogramm: Connection refused Netzwerkprogrammierung 4
Y UDP Chatprogramm auf Client/Server Basis Netzwerkprogrammierung 5
T FTP Chatprogramm probleme Netzwerkprogrammierung 2
J Chatprogramm Netzwerkprogrammierung 9

Ähnliche Java Themen


Oben