# Java will Telnet nicht verstehen



## madmaurice (13. Jul 2008)

Also ich arbeite an einem Telnet server genauer an einem eigenen kleinen MUD, einfach so aus spaß.

Jezt hab ich einen Server zusammen gebastelt der erst mal nur ein telnet server ist. der kann bis zu 200 clienten gleichzeitig annehmen. nun gibt es bei mir eine function die die Kommandos parst .

Alles läuft er sammelt alle zeichen bis ein (char)13 kommt dann führt er diese OnCommand-funktion aus. weiterhin ignoriert er alle (char)10 und bearbeitet noch (char)8 (backspace).

nun alles schön und gut ich hab letztendlich den string "quit" eingegeben und nun prueft er cmd == "quit" was aber false ergibt. ich habe alles überprüft. sogar die laenge des strings die oncommand bekommt um etwaige versteckte zeichen zu finden. aber nichts ist.

Hier mal der Code der für den Empfang verantwortlich ist.

in der server klasse:

```
void Log(String str) {
        Date now = new Date();
        System.out.println(DateFormat.getDateTimeInstance().format(now)+" Log:"+str);
    }

    void RecieveUserInput() {
        String c;
        for(User u: users) {            
            while(u.HasRecvData()) {
                c = u.RecvChar();
                int cint = (int)c.charAt(0);
                if(cint == 13) {
                    
                    this.OnCommand(u,u.input);
                    u.input = "";
                    Log("OnPressEnter");
                } else if(cint == 10) {
                    //Ignore
                } else if(cint == 8) {
                    u.input = u.input.substring(0,u.input.length()-2);
                } else {
                    u.input += c;
                    Log("OnDataRecieve ( "+c+" )");
                }
            }
        }
    }

    void OnCommand(User u, String cmd) {
        Log("OnCommand ( "+cmd+" , "+String.valueOf(cmd.length())+" )");
        if(cmd == "quit") {
            u.Send("ByeBye!");
            u.Disconnect();
        } else if(cmd == "hi") {
            u.Send("Hi");
        } else {
            u.Send("Unknown Command");
        }
    }
```

in der user klasse:

```
String RecvChar() {
        try {
            return String.valueOf((char)in.read());
        } catch(IOException io) {
            return "";
        }
    }
```

Als Output bekomm ich nur


> OnDataRecieve ( q )
> OnDataRecieve ( u )
> OnDataRecieve ( i )
> OnDataRecieve ( t )
> ...



Und im telnet die antowort "Unknown Command"


----------



## maki (13. Jul 2008)

Strings sind Objekte und Objekte vergleicht man mit equals()...


----------



## tuxedo (14. Jul 2008)

Strings werden nicht mit == auf gleichen Inhalt überprüft sondern mit equals() oder auch equalsIgnoreCase() ...
Mit == überprüfst du "Objektgleichheit".

-Alex

[update]
Hmm, das hab ich jetzt davon wenn ich auf antworten klicke obwohl die ganze Seite noch nicht geladen ist *mist* ... Naja, "doppelt" hält besser ;-)


----------



## Guest (14. Jul 2008)

alex0801 hat gesagt.:
			
		

> Strings werden nicht mit == auf gleichen Inhalt überprüft sondern mit equals() oder auch equalsIgnoreCase() ...
> Mit == überprüfst du "Objektgleichheit".



achja hatte ich vergessen. eqaulsIgnoreCase() war mein erster Versuch. dachte dann aber das wäre für etwas anderes gut. deswegen hatte ichs jezt nicht erwähnt


----------



## madmaurice (14. Jul 2008)

Anonymous hat gesagt.:
			
		

> alex0801 hat gesagt.:
> 
> 
> 
> ...



sry vergessen einzuloggen.


----------



## tuxedo (14. Jul 2008)

Nicht denken ... apidoc lesen ... ;-)

- Alex


----------



## madmaurice (14. Jul 2008)

oke es hat doch geklappt. hatte beim letzten versuch alle chars mit ascii 10 noch nicht ignoriert.

€dit:Wenn ich nicht denken würde bräucht ich auch nicht programmieren lernen.


----------



## tuxedo (14. Jul 2008)

Ich hab damit gemeint: Bevor du anfängst dir irgendwas zusammen zu reimen: Les lieber die API. Denn die hat (in den allermeisten Fällen) recht ...

- Alex


----------

