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.
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:
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
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