Sockets, readLine()

Status
Nicht offen für weitere Antworten.
E

Exavier

Gast
Hallo liebes Forum,

wir müssen für die Uni einen Mail-Client schreiben, der vorerst nur abrufen soll. Und zwar eine beliebige Mail von einem beliebigen Account.

Ich habe neben main prozedur noch diveres andere für anmelden, abholen, löschen, statusabfrage und schliessen etc... das heisst, dass ich nach der Anmeldung die Sockets erstmal nicht schliesse und der User entscheiden kann wie er weitermachen möchte.

Mein Problem besteht darin, dass ich in der Anmeldung folgen Code-Schnipsel nicht verwenden kann:

Code:
        while ((responseLine = inputstream.readLine()) != null) {
          System.out.println("Server: "+responseLine);
          System.out.println(responseLine.startsWith("+OK"));
          if (responseLine.startsWith("+OK")){
            korrekt=true;
          }
          if (responseLine.indexOf("222") != -1) {
            break;
          }
        }

Da ich ja von dem Server-Buffer laufend Lesen möchte, solang ich noch etwas bekomme. Nur wartet die Methode readLine() leider so lang, bis vom Server nen Zeilenumbruch kommt. Da ich haber nichts mehr sende kommt auch nichts mehr, und da hört das progrämmchen auch schon auf zu arbeiten.
Wie kann ich es ohne nen Timeout lösen, dass er nachdem ich vom Buffer alles gelesen habe was da ist das Programm einfach weitermacht?

Timeout aus dem Grund nicht, da es pro Verbindung und Rechner zu untrerschiedliche Zeiten sein können.

mfg

exa

PS: habs in keinem anderen forum geschrieben.
 

Tellerrand

Bekanntes Mitglied
Ich verstehe das Problem nicht ganz.
Du verwendest keinen Thread der auf dem Socket auf ankommende Daten wartet sondern hällst quasi das Programm an bis Daten angekommen sind?
 
G

Guest

Gast
ich möchte die daten, die der server im buffer hat für jede prozedur einzeln auswerten... in dem fall konkret wäre das

ok für verbidung
ok vaild username
ok passwort accepted
..
und die möchte ich alle auslesen, verarbeiten und ggf. ausgeben...und das mache ich mit readLine(), aber der Server sagt mir nicht: so.. jetzt is mein buffer leer.. du kannst mir was neues senden....

und deshalb wartet readLine() bis ich was neues empfange vom server.. aber das ist ja nichts mehr.. weil ich in der prozedur die verbindung nicht abbaue

kann man readLine() irgendwie umbauen.. oder gibt es ein äquivalent, das nicht wartet, bis vom server was kommt?
 
G

Guest

Gast
ich poste mal mehr von der prozedur

Code:
    if (popSocket != null && outputstream != null && inputstream != null) {
      try {
        outputstream.writeBytes("USER "+account+"\n");
        outputstream.writeBytes("PASS "+password+"\n");
        String responseLine;
        while ((responseLine = inputstream.readLine()) != null) {
          System.out.println("Server: "+responseLine);
          System.out.println(responseLine.startsWith("+OK"));
          if (responseLine.startsWith("+OK")){
            korrekt=true;
          }
          if (responseLine.indexOf("222") != -1) {
            break;
          }
        }
      }catch (UnknownHostException e) {
        System.err.println("Unknown Host: "+e);
        korrekt = false;
      }catch (IOException e) {
        System.err.println("IOException:  " + e);
        korrekt = false;
      }
    }

Ich initialisiere also popsocket und die beiden streams, schicke dem server die Daten für den login und wenn das alles getan ist und die prozedur aufhören soll horcht readLine() weiterhin. Es fehlt also eine geeignetet abbruchbedinung oder sowas dergleichen. denn der server sagt ja nichts mehr nachdem er die erstens oks gesendet hat

hoffe das trägt zum verständnis bei[/quote]
 
E

Exavier

Gast
habe oben vergessen Username anzugeben.. sorry..

nochmal kurz: mein problem ist mir bewusst. readLine() horcht so lang bis was kommt,.. und wenn 10 min nix kommt dann horcht er eben 10 min... ich suche also eine elegante lösung.

ansatz 1: wenn ich mit sicherheit weiss, dass jeder mailserver für socket aufmachen + accounteingabe + passworteingabe 3 antworten auf seinen buffer legt, brauch ich nur bis 3 zählen und kann aufhören.

ansatz 2: ich setze nen timeout auf x sekunden, und wenn bis dahin nix passiert kommt nen break.

ansatz 2 find ich seeehr unschön. ansatz 1 ist ok, sofern die 3 garantiert werden..

andere lösungen? meinungen?

exa
 

Tellerrand

Bekanntes Mitglied
Laut pop3 RFC ist es garantiert das 3 Meldungen kommen.
1. Verbindungsaufbau
2. Antwort auf Username
3. Antwort auf Passwort

... sofern ich mich da nun nicht ganz verhaspelt habe.

EDIT: Ähm, ich habe natürlich ncihts darüber gesagt was passiert wenn da was nicht stimmt mit Username PAsswort und Verbindungsaufbau.
Notfalls musst du dich da selber mit den Protokollen befassen ;)
 

mic_checker

Top Contributor
Versteh problem auch nicht ganz. Hatten ähnliche aufgabe. Hab erst Verbindung aufgebaut, dann USER rübergeschickt und dann PASS. Jeweils kontrolliert ob laut Rückgabe alles ok ist und dann kannst du LIST, RETR etc. ganz normal aufrufen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Jannn Socket Sockets an ein anderes Gerät weiterreichen? Netzwerkprogrammierung 8
JaXnPriVate Java HTTPS Server (Secure Sockets) Netzwerkprogrammierung 15
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2
E Socket Parameter über Sockets übergeben und auslesen ! Netzwerkprogrammierung 5
D Socket Verwirrung bei Sockets Netzwerkprogrammierung 1
E Mehrere Sockets Netzwerkprogrammierung 2
N Fragen zu Sockets Client Netzwerkprogrammierung 3
A Sockets Serialisierung Netzwerkprogrammierung 1
K Threads closen und Sockets schliessen Netzwerkprogrammierung 5
H Sockets oder HTTP- Methoden? Netzwerkprogrammierung 3
T Socket Bidirektionale Verbindung mit Sockets Netzwerkprogrammierung 8
P Problem mit Datagram-Sockets Netzwerkprogrammierung 2
C Socket Datagram-Sockets mit integrierter Message Queue? Netzwerkprogrammierung 2
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
F Technologiewahl: Swing/RMI/Sockets Netzwerkprogrammierung 13
B Sockets, Threads & Plugins Netzwerkprogrammierung 7
T Verbindungsversuche über TCP Sockets von mehreren Threads führt zu Serverabsturz Netzwerkprogrammierung 2
D Mehrere Clients über Java-Sockets Netzwerkprogrammierung 13
F FTP Client mit Sockets - wann sagt der Server nichts mehr? Netzwerkprogrammierung 7
U Socket Abhören eines Sockets/Ports in extra Thread Netzwerkprogrammierung 8
M Socket Sockets Grundlage Netzwerkprogrammierung 25
I Socket HTTP Nachrichten über Sockets verschicken Netzwerkprogrammierung 2
D Socket Raw Sockets mit java.net.*? Bsp ICMP Netzwerkprogrammierung 7
H Komprimierte Sockets Netzwerkprogrammierung 4
V Verbindung zweier Rechner über das Internet mit Sockets Netzwerkprogrammierung 8
L Sockets übergeben Netzwerkprogrammierung 4
G NIO Sockets Architektur Problem Netzwerkprogrammierung 2
S Problem bzgl. Sockets / Server-Client-Struktur Netzwerkprogrammierung 3
B Socket Was muss man bei Sockets beachten? Netzwerkprogrammierung 10
N Socket Sockets und Events Netzwerkprogrammierung 11
A Programm umschreiben von Pipes auf Sockets Netzwerkprogrammierung 12
B Paralleler Dateitransfer: Ein Client - Mehrere Sockets? Wie connecten? Netzwerkprogrammierung 16
D RMI oder Sockets Netzwerkprogrammierung 4
P Sockets +Port Forwarding = Chaos Netzwerkprogrammierung 4
clupus Exception beim Schließen eines Sockets Netzwerkprogrammierung 6
Q Thread und Sockets... Netzwerkprogrammierung 2
G Sockets und HTTP: Ende des Datenempfangs erkennen Netzwerkprogrammierung 3
J Array oder Object über Sockets Netzwerkprogrammierung 8
O Sockets -- Einsieg Netzwerkprogrammierung 3
S Sockets und gzip Netzwerkprogrammierung 8
B Nachricht über Sockets kommt nicht an Netzwerkprogrammierung 8
data89 Sockets: ein alter Hut - für Euch - für mich nicht! Netzwerkprogrammierung 10
S Wiedereinmal Sockets ;-) Netzwerkprogrammierung 15
J Ascii / Unicode bei Sockets? Netzwerkprogrammierung 2
G Datagram-Sockets für UDP-Kommunikation Netzwerkprogrammierung 2
K "Ende eines Sockets" Netzwerkprogrammierung 9
A Sockets Netzwerkprogrammierung 10
feuervogel Sockets - Lokalen Port aber nicht IP bestimmen Netzwerkprogrammierung 3
C Einfacher Filedownload mit Sockets geht nicht für pdffiles Netzwerkprogrammierung 16
M Sockets und InputStream Netzwerkprogrammierung 8
G Verbindung über Sockets Netzwerkprogrammierung 2
S zip-files über sockets übertragen Netzwerkprogrammierung 11
G immer wieder gleiche Sockets Netzwerkprogrammierung 2
V Suche Alternative zu Sockets Netzwerkprogrammierung 3
E Problem bei Sockets/InputStream über externe Klasse Netzwerkprogrammierung 5
A Datenverlust (zuviele Daten!) über Sockets Netzwerkprogrammierung 4
AlClemento Sockets -> BufferedReader Problem Netzwerkprogrammierung 2
F Problem mit Threads und Sockets Netzwerkprogrammierung 3
B Übertragung via Sockets Netzwerkprogrammierung 12
C Dateien über Sockets versenden? Netzwerkprogrammierung 10
T Sockets Verständnisfrage: abwechelnd lesen-schreiben Netzwerkprogrammierung 4
S Habe ein Problem mit Sockets -> Client Server Netzwerkprogrammierung 2
G Strings über Sockets senden Netzwerkprogrammierung 5
P Probleme mit einem Array aus Sockets Netzwerkprogrammierung 2
Y buch: Netwerprogrammierung und Sockets Netzwerkprogrammierung 2
B Eigenes Protokoll über Sockets verschicken Netzwerkprogrammierung 4
P Welche Art von Sockets für ein Spiel? Netzwerkprogrammierung 3
C Sockets über Internet Netzwerkprogrammierung 10
K Applet - Servlet Kommunikation ohne Sockets Netzwerkprogrammierung 5
S Objekte zwischen Client und Server über Sockets senden Netzwerkprogrammierung 2
Z chat: wann http und wann sockets verwenden? Netzwerkprogrammierung 11
D Java Sockets Probs Netzwerkprogrammierung 4
N Verarbeitung nach Weiterleitung in Sockets Netzwerkprogrammierung 2
A Serialisierung über Sockets möglich? Netzwerkprogrammierung 3
M sockets (security) Netzwerkprogrammierung 2
C IRC CHAT auslesen -> Sockets/input und output Streams Netzwerkprogrammierung 9
X Socket [Anfänger] BufferedReader.readLine() lässt sich Zeit Netzwerkprogrammierung 1
B Socket BufferedReader.readLine() beenden ohne den Stream zu closen Netzwerkprogrammierung 7
D Komischer Fehler Readline() Netzwerkprogrammierung 7
A Socket BufferedReader.readLine() blockiert bis ein im Socket OutputStream was gesendet wird ... Netzwerkprogrammierung 9
T Bezeichner "end of line" für die Funktion readline Netzwerkprogrammierung 5
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
0din SMTP Client - readline problem Netzwerkprogrammierung 4
B Multi-Threaded block bei BufferedReader.readLine() Netzwerkprogrammierung 8
G .readLine() blockt? Netzwerkprogrammierung 3
B Socket - Scanner - readLine(); Netzwerkprogrammierung 2
M Socket und readLine() Netzwerkprogrammierung 4
J readline blockiert? Netzwerkprogrammierung 9
P Problem mit readLine ---- und mit dem connecten Netzwerkprogrammierung 10
S readline-thread stoppt vorzeitig Netzwerkprogrammierung 6
O BufferedReader.readline kommt nicht zurück Netzwerkprogrammierung 7
B BufferedReader.readLine() ließt nicht vollständig ! ? Netzwerkprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben