Login Chatsystem

Status
Nicht offen für weitere Antworten.

HawkofHell

Mitglied
Nach einem langen Leidensweg, mit einigen Tutorials und mehr oder weniger unbrauchbaren Fremdcodeschnippsel, bin ich nun hier gelandet.

Ich versuche eigentlich nur einen recht simplen Chatserver zu schreiben, der ein Login System (MySQL) unterstützt & verschiedene Räume hat. Viel mehr auch nicht (außer Standartbefehle)...
Prinzipiell, verwöhnt von Sprachen wie C# & PHP, machte ich mich also an die Arbeit... und verzweifle nun seit 3 Monaten schon am Grundansatz.

Eine einfache Client -> Server verbindung klappt schonmal, bloß da tut sich natürlich schonmal die Grundsätzliche Frage auf, wie realisiere ich das Login?
Prinzipiell ist es ja nur 'einfaches' akzeptieren der Verbindung des Clienten, Lesen der Logindaten, Vergleichen mit der SQL & dann zuweisen bei den Objekten der Klassen Chatter & später dann Room, die die jeweilligen Informationen des Chatters beinhalten sollen, insbesondere der Verbindungsdaten...
Room sollte außerdem die ganzen Sockets per Multiplex mit Daten rein und raus Versorgen, da es eventuell zu großen Auslastungen kommen kann, doch so richtig klappt auch das nicht. So richtige Tutorials habe ich dazu bisher auch nicht gefunden...

Irgendwie bekomm ich es nicht richtig hin... Wenn jemand einen Denkansatz posten könnte, einen Beispielcode oder so wäre das Ideal, denn ich glaube ich bin schon vom Ansatz her vollkommen falsch. Jemand, der mir sowas 'schnell' mal programmiert, kann sich als meine Gottheit ansehen.

Bitte helft einen armen, unwissenden Programmierer :cry:
 

HawkofHell

Mitglied
Nachdem ich mir 3 Kannen Kaffe hinter die Ohren gekippt habe, ist mir nun doch eine Lösung eingefallen, bloß es gibt da noch einige Problemchen.

Multiplex für Socket Threads
Nicht implementiert... Beispiele?

Räume
Also... ich habe die Räume in einer static LinkedList gespeichert. Nun möchte ich auf einen der Räume zugreifen und den Raum als Rückgabewert einer Prozedur übergeben, damit ich damit weiterarbeiten kann (z.B. User hinzufügen).
Aber es klappt leider nicht...

Code:
/**
 * Diese Prozedur sucht nach dem Vorkommen des Strings Name in der Raumliste und übergibt dann
 * den Raum als solches. Class: Communication.
 * @param Name => Der Raumname
 * @return => Einen Raum
 */
public static Room isRoom(String Name)
{
	Room raum = new Room();
	
	for(int i = 0; i<Startup.Raeume.size(); i++)
	{
			raum = (Room) Startup.Raeume.get(i);
			if(raum.getRoomName()==Name)
			{
				return (Room) Startup.Raeume.get(i);
			}
	}
	return null;
}

Damit wird dann wie folgt weitergearbeitet:
Code:
Room isRoom = Communication.isRoom(this.Roomname);
if(isRoom!=null && isRoom.getRoomName()==this.Roomname)
{
		isRoom.addChatter(this);
}
else
{
out.print("Room full or non existent - sorry");
}

Login - Lesen der Werte
Beim Lesen der Werte für das Login (Nickname, Passwort...) passiert es, dass folgender Code, immer zu einem 'Nick existiert nicht' führt...
Code:
this.Nickname = (String)in.readLine();
if(this.Nickname == "HawkofHell")
{
out.println("Funzt");
}
else
{
out.println("Nick existiert nicht");
}
Aber warum? Bei der Ausgabe kommt immer "HawkofHell" als Wert von this.Nickname raus, trotzdem ist es nicht "HawkofHell"...
 

FelixR

Mitglied
Code:
this.Nickname = (String)in.readLine();
if(this.Nickname.equals("HawkofHell"))
{
out.println("Funzt");
}
else
{
out.println("Nick existiert nicht");
}


Bei Strings immer Equals verwenden.
 

HoaX

Top Contributor
gleiches bei deinem room-zeug - wieso erstellst du oben einen neuen raum der eh nie verwendet wird? außerdem erwarte ich bei einer funktion die mie "is" anfängt dass sie einen boolean zurück gibt. was du da hast ist ehr ein "getRoomByName". die liste mit den räumen würde ich nicht statisch machen - man will ja vielleicht mal mehrere server erstellen können ...
 

HawkofHell

Mitglied
HoaX hat gesagt.:
wieso erstellst du oben einen neuen raum der eh nie verwendet wird?
Er wird Verwendet, es ist nur ein Codeausschnitt :wink:
Außerdem werde ich ihn warscheinlich fürs spätere Multiplex benötigen.

Hoax hat gesagt.:
außerdem erwarte ich bei einer funktion die mie "is" anfängt dass sie einen boolean zurück
Okay... akzeptiert.

Hoax hat gesagt.:
die liste mit den räumen würde ich nicht statisch machen - man will ja vielleicht mal mehrere server erstellen können ...
Ich bin Faul, ein anderer Zugriff auf die Liste - von meiner Programmstruktur aus - würde zu viel meiner Lebenszeit im Anspruch nehmen. Außerdem habe ich nicht vor mehrere Server davon zu erstellen, falls ein anderer das will: Heute gibt es schöne Virtualisationstechnologien :bae:

FelixR hat gesagt.:
Bei Strings immer Equals verwenden.
Ich danke dir ... bin noch viel zu C# verwöhnt, hätte ich mir aber auch denken können. Problem war, dass er den Speicherbereich verglichen hat, ne? Hätt ich auch selber drauf kömmen können... :roll:
 

HawkofHell

Mitglied
Da meld ich mich doch mal wieder zurück... der Chatserver mit Sockets, Loginsystem & MySQL läuft soweit ganz gut. Die Performance ist für java.io.* eigentlich auch gar nicht mal so schlecht, soweit ich das beurteilen kann, aber man will sich ja ständig weiterbilden und nun bin ich auf java.nio.* gestoßen :D

An sich ein (finde ich) einfaches Konzept, was sehr flexibel ist und blaa blaaa... aber ich hab nen Problem bei dem empfangen von Messages vom Clienten zum Server (andersherum klappts auch noch nicht so ganz, aber da probier ich nochn bissl rum, das wird schon noch)

Die NullPointerException ist gegessen, war ein unglücklicher Sprung in einen catch() Block, der nicht sein sollte :)

Er liest trotzdem nichts... Geschweige denn schreibt etwas... *säufz*
Ich hab mal alle Klassen die dazugehören hochgeladen, wenn jemand so nett wäre, sie mal durchzuschauen, wäre ich ihm echt verbunden.

multiplexServer

Die Klasse die mir insbesondere Sorgen macht:
Code:
package multiplexServer;

import java.nio.channels.*;
import java.util.Iterator;
import java.util.Set;
import java.io.*;


public class tInput extends Thread {

protected Selector iSelector;
protected Set selectedKeys;
public void addChannel(SocketChannel channelname)
{
	try
	{
		System.out.println("da");
		channelname.register(this.iSelector, SelectionKey.OP_READ); // Momentan hängt er - genau wie vorher - hier. "da" gibt er noch aus, aber "hier" streikt er leider :(
		System.out.println("hier");
	}
	catch(ClosedChannelException e)
	{
		System.err.println(e.toString());
	}
}

public Selector getSelector()
{
	return this.iSelector;
}

public void run()
{
	try
	{
		initialize();
		while (true) 
		{
			int ready = this.iSelector.select(5000);
			if (ready == 0) continue; 
			selectedKeys = this.iSelector.selectedKeys();
			Iterator it = selectedKeys.iterator();
			while (it.hasNext()) 
			{
				SelectionKey key = (SelectionKey) it.next();
				if ((key.readyOps() & SelectionKey.OP_READ)==SelectionKey.OP_READ)
				{
					SocketChannel sc = (SocketChannel) key.channel();
					//TODO ReadingAll
				}
				it.remove();
			}
		}
	}
	catch(IOException e)
	{
		System.err.println(e.toString());
	}
}

public void initialize()
{
	try
	{
		this.iSelector = Selector.open();
	}
	catch(IOException e)
	{
		System.err.println(e.toString());
	}
}


}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Jenkins Login per Java Download Manager Netzwerkprogrammierung 15
T HTTP JSoup Automatic Website Login Netzwerkprogrammierung 1
Q-bert Link zugang ohne login sperren. Netzwerkprogrammierung 1
S Jsoup Login auf Schulserver Netzwerkprogrammierung 3
T Netzwerk Login Felder ansprechen Netzwerkprogrammierung 1
M HTTPS Login & etwas posten Netzwerkprogrammierung 0
M Sicheres Login-System für App implementieren Netzwerkprogrammierung 6
K Login Shibboleth Netzwerkprogrammierung 0
L Mit Java über PHP in MySQL anmelden (Login script) Netzwerkprogrammierung 3
N HTTP Apache 4.2.1 HttpClient 302 nach Login und auf den weiteren Seiten. Netzwerkprogrammierung 5
D HTTP Frage zu Login & Session ID Netzwerkprogrammierung 5
J Login Bereich auf jeder Seite Netzwerkprogrammierung 4
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
I HTTP S - Zertifikate+Cockies für Form-basierten Login Netzwerkprogrammierung 2
S Automatischer Login auf einer Webseite Netzwerkprogrammierung 12
E Webseite mit Login laden Netzwerkprogrammierung 5
C Login ohne Erfolg Netzwerkprogrammierung 2
xDarkSunx Hilfe Chat Login Netzwerkprogrammierung 7
T Java => Login mit MySQL Netzwerkprogrammierung 10
M Login mit HtmlUnit Netzwerkprogrammierung 6
K Login via apache httpclient Netzwerkprogrammierung 4
N Login mit Roboter Netzwerkprogrammierung 16
S HTTP Login mit CAS Authentisierung über SSL Netzwerkprogrammierung 2
M Servlet als Login Netzwerkprogrammierung 20
J Socket Doppel Login geht nicht Netzwerkprogrammierung 11
N Login auf Website Netzwerkprogrammierung 11
H HTTP Login mit POSTMethod und httpClient Netzwerkprogrammierung 5
K HTTP Login Internetseite Netzwerkprogrammierung 17
lordcarlos HTTP Apache HttpClient, post und login. Netzwerkprogrammierung 2
G ftp login Netzwerkprogrammierung 10
L Web Login Netzwerkprogrammierung 3
K Bad Request nach Form Login in Jakarta HttpClient Netzwerkprogrammierung 4
2 Redirect, Login und Download bei Rapidshare.com Netzwerkprogrammierung 4
lebenlechzer Login per Telnet auf Router Netzwerkprogrammierung 2
N icq login Netzwerkprogrammierung 16
M Problem: connection abbrechen und login erkennen Netzwerkprogrammierung 2
C Login bei einem php-script Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben