Socket InputStream sendet ausgaben von OutputStream zurück

*Merc

Mitglied
Moin !
Ich muss für die Uni einen pop3 sammeldienst mit Server Funktion schreiben und dazu das POP3 Protokoll implementieren.
Das klappt bisher auch alles gut und ich bin fast fertig nur jetzt scheitere ich an einem irgendwie blöden Fehler.....

Ich benutze zum Senden an den Client einen BufferedWriter und zum Empfangen einen BufferedReader, die streams hole ich mir jeweils vom socket ab.

Hier ist mal die Klasse die ich zum Bearbeiten der Connections nutze.

Java:
 public class POP3ConnectionManager extends Thread {

    private Socket socket;
    private BufferedWriter outToClient;
    private BufferedReader inFromClient;
    public static final String OKMSG = "+OK ";
    public static final String ERRORMSG = "-ERR ";
    public static final boolean OKFLAG = true;
    public static final boolean ERRORFLAG = false;
    private String willkommenNachricht = "Willkommen auf dem RNP POP3 Server!";
    private String sentence;

    private POP3ConnectionManager() {
    }

    public POP3ConnectionManager(Socket socket) throws IOException {
        this.socket = socket;
        outToClient = new BufferedWriter(
                new OutputStreamWriter(socket.getOutputStream()));
        inFromClient = new BufferedReader(
                new InputStreamReader(socket.getInputStream()));
        sende(willkommenNachricht, POP3ConnectionManager.OKFLAG);
        sende("Test fehler", POP3ConnectionManager.ERRORFLAG);
    }

    @Override
    public void run() {
        while (true) {
            try {
                sentence = inFromClient.readLine();
                System.out.println("Eingabe: " + sentence);
                System.out.println("Befehl suche ergab: " + POP3Befehle.sucheBefehl(sentence));
            } catch (IOException ex) {

            }

        }
    }

    public void sende(String msg) {
    }

    public void sende(String[] msg) {
    }

    public void sende(String msg, boolean status) throws IOException {
        if (status) {
            outToClient.write(POP3ConnectionManager.OKMSG + msg);
        } else {
            outToClient.write(POP3ConnectionManager.ERRORMSG + msg);
        }
        outToClient.newLine();
        outToClient.flush();
    }

    public void sende(String[] msg, boolean status) {
    }
}

Das Problem hierbei ist nun folgendes.
Ich sende an den Server die wilkommens nachricht, gefolgt von einen Carriage return line feed (\r\n). Ansonsten sind die Ausgaben bei dem Client halt alle in einer Zeile und werden unleserlich, ganz zu schweigen das etablierte pop3 Clienten wie Thunderbird etc. (damit muss der Server kompatibel sein) damit nichts anfangen könnten.
Tippe ich nun aber einen Befehl in die Konsole und sende ihn an den Server bekomme ich beim ersten Mal ein totales kauderwelsch zurück.
So sieht die Ausgabe des Servers aus:
Code:
run:
Starte Client
Starte Server
Warte auf Verbindungswunsch auf Port 11000
Warte auf Verbindungswunsch auf Port 11000
Eingabe: ��¬�� �� ��'�� �� �� Helo
Befehl suche ergab: -1
Eingabe: helo
Befehl suche ergab: 0

Eingabe: ist was der Client geschrieben hat, wie bekomme ich diese komischen Zeichen da weg?
Zumal ich das Problem dann bei jeder Ausgabe an den Client haben werde.
nur ein \n hat das gleiche Problem zur Folge und dann ist auch noch alles komisch verschoben.
Habe es auch mit einem Printstream versucht aber auch das hat nichts gebracht.

Mach ich hier essenziell etwas falsch?

Ich habe schon überlegt ob man den inputStream nach jedem senden eines Befehls einfach leert, nur leider gibt es dafür keinen Befehl und manuell leeren funktioniert nicht da der Stream nichts enthält bis der Client einmal enter gedrückt hat ....

MFG und danke
Marc
 
J

JohannisderKaeufer

Gast
Ich hab das ganze mal ausprobiert.

Einen JavaClient der per Socket eine Nachricht schickt.
telnet direkt aus der Konsole.
Alles ohne "Kauderwelsch".

Dann Putty - telnet
und plötzlich war da der unentzifferbare Mist vorhanden.
Ich denke, daß es sich dabei um eine spezielle Handshake-Methode handelt die bei Putty auf on ist.
wandelt man das in Character kommt folgendes heraus.
Code:
65533
65533
31
65533
65533
32
65533
65533
24
65533
65533
39
65533
65533
1
65533
65533
3
65533
65533
3

Was das bedeutet. Keine Ahnung.

Aber ich gehe nicht davon aus, daß das ein Mangel an deiner bisherigen Server Implementierung ist.
Ich gehe davon aus, das du einfach diesen "Handshake", wenn es denn einer sein soll, handeln mußt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Socket Wie kann man in Java die Anzahl der Objekte in einem InputStream sehen ohne ihn durchgehen zu müssen Netzwerkprogrammierung 1
S Socket String InputStream in hex umwandeln Netzwerkprogrammierung 1
D GZIP InputStream lesen ohne zu encoden Netzwerkprogrammierung 1
F Java Server Scanner oder InputStream kann nicht gelsesen werden! Netzwerkprogrammierung 6
R Socket InputStream readObject > Connection Reset Netzwerkprogrammierung 3
windl InputStream cachen Netzwerkprogrammierung 3
K Socket InputStream wird nicht erzeugt Netzwerkprogrammierung 4
M Socket InputStream liest nicht vollständig Netzwerkprogrammierung 7
M Was macht Thread, wenn er aus einem "leeren" Inputstream liest ? Netzwerkprogrammierung 5
K Byte für Byte aus InputStream lesen Netzwerkprogrammierung 5
F JSch - inputstream is closed Netzwerkprogrammierung 13
D Inputstream to Outputstream Netzwerkprogrammierung 3
M InputStream and ObjectInputStream zur gleichen Zeit Netzwerkprogrammierung 11
T Inputstream -> verschiedene Objekte lesen Netzwerkprogrammierung 3
MQue Inputstream Timeout Netzwerkprogrammierung 2
S Servlet InputStream leer?! Netzwerkprogrammierung 14
G HTTP-Request InputStream-Problem Netzwerkprogrammierung 5
P Inputstream "verfügbar" Netzwerkprogrammierung 4
G JPG im InputStream Netzwerkprogrammierung 2
A InputStream liest immer komplettes PHP-Script Netzwerkprogrammierung 6
A InputStream ließt nur 65536 Zeichen anstatt ganzer Puffer Netzwerkprogrammierung 8
A inputstream teilen? Netzwerkprogrammierung 4
D InputStream (Socket) mit BufferedInputStream puffern Netzwerkprogrammierung 2
M Sockets und InputStream Netzwerkprogrammierung 8
R Client nimmt den Inputstream nicht an Netzwerkprogrammierung 5
S Mail anhang in InputStream packen Netzwerkprogrammierung 5
M InputStream - Bytes gehen verloren? Netzwerkprogrammierung 3
E Problem bei Sockets/InputStream über externe Klasse Netzwerkprogrammierung 5
André B. In einen InputStream schreiben? Netzwerkprogrammierung 6
G inputstream hat plötzlich weniger inhalt Netzwerkprogrammierung 8
Z ProgressBar auf BufferedOutput- & -InputStream Netzwerkprogrammierung 2
T Socket sendet erst nach socket.close() Netzwerkprogrammierung 2
H Socket Java | Server sendet Nachricht nur wenn vorher eine JOptionPane-Nachricht ausgegeben wurde. Netzwerkprogrammierung 2
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
O Chat (Server) sendet an verschieden Benutzer. Netzwerkprogrammierung 10
Rudolf Socket An welchen Port sendet ein Mailserver zu einem anderen Mailserver Netzwerkprogrammierung 8
das-mo Client/Server sendet nicht Netzwerkprogrammierung 7
A Socket UDP Chat Verbindungsproblem im WWW (Server sendet ins leere) Netzwerkprogrammierung 11
H PC-A sendet, PC-B liest aus Netzwerkprogrammierung 32
V Client Server Problem, empängt oder sendet nichts Netzwerkprogrammierung 4
S Client sendet - Server leitet weiter Netzwerkprogrammierung 4
T Musik-Stream: Server sendet die Datei zu schnell ? Netzwerkprogrammierung 3
H Server sendet im Intervall IOException Netzwerkprogrammierung 2

Ähnliche Java Themen


Oben