Socket [Anfänger] BufferedReader.readLine() lässt sich Zeit

xetra11

Neues Mitglied
Hallo Leute,

Ich habe in meiner Ausbildung heute den Auftrag bekommen einen simplen Webserver in Java zu schreiben.
Soweit macht es auch ne Menge Spass, habe viel neues über die Libraries gelernt und konnte ein wenig Unit-Testing anwenden.
Leider scheitert es nun auch bei den Unit-Tests, da ich gerne testen möchte ob meine ConnectedClient (Mein Wrapper für den Socket [Client Socket]) API auch anständig funktioniert.

ConnectedClient-Klasse:
Java:
package com.babiel.azubis.webserver;

import jdk.management.resource.internal.inst.SocketInputStreamRMHooks;

import java.io.*;
import java.net.*;
import java.util.logging.Level;

/**
* Created by xetra11 on 08.01.2016.
*/

public class ConnectedClient {
  private Socket clientSocket;
  private InputStream fromClientByteReader;
  private BufferedReader fromClientTextReader;
  private PrintWriter toClientWriter;
  private ByteArrayOutputStream toClientByter;
  private static final String CLIENT_CONNECTION_ERROR_MESSAGE = "Client could not be accepted.";


  public ConnectedClient(Socket socket) {
    try {
      clientSocket = socket;
      fromClientByteReader = clientSocket.getInputStream();
      fromClientTextReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
      toClientWriter = new PrintWriter(clientSocket.getOutputStream());
      toClientByter = new ByteArrayOutputStream();
    } catch (Exception exception) {
      ServerLogger.log(Level.SEVERE, CLIENT_CONNECTION_ERROR_MESSAGE, exception);
    }
  }

  public void getLocalAddress() {
    clientSocket.getLocalAddress();
  }

  public void getPort() {
    clientSocket.getPort();
  }

  public int receiveFromClientAsByteStream(byte[] givenBuffer, int offset, int length) throws IOException {
    return fromClientByteReader.read(givenBuffer, offset, length);
  }

  public String receiveFromClientAsCharStream() throws IOException {
    return fromClientTextReader.readLine();
  }

  public void sendToClientAsByteStream(byte[] bytes) throws IOException {
    toClientByter.write(bytes);
  }

  public void sendToClientAsText(Object textToSend) {
    toClientWriter.println(textToSend);
  }

}


Dort habe ich 4 Methoden für die Kommunikation mit dem ConnectedClient erstellt. Jeweils zwei zum Empfangen und zwei zum Schreiben an den Client. Und die wider rum unterschieden in Text und Byte Streams.

Nun wollte ich das Ganze testen und zwar wie folgt (Bitte beachtet, dass ich hier noch keine assertion eingebunden habe. Lediglich ein System.out da ich einfach mal sehen wollte ob es überhaupt funktioniert...Ja dazu ist der Test da, aber ich wollte es geloggt haben :p ):

Java:
package com.babiel.azubis.webserver;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;

/**
* Created by p.hoefer on 08.01.2016.
*/

public class ConnectedClientTest {
  Socket mockedClient;
  ServerSocket mockedServerSocket;
  ConnectedClient connectedClient;
  InetSocketAddress serverAddress;

  public ConnectedClientTest(){
    mockedClient = new Socket();
    serverAddress = new InetSocketAddress("localhost", WebServer.DEFAULT_PORT);
  }

  @Before
  public void setup() throws IOException {
    mockedServerSocket = new ServerSocket(WebServer.DEFAULT_PORT);
  }

  @After
  public void tearDown() throws Exception {
    mockedServerSocket.close();;
  }

  @Test
  public void shouldReceiveTextMessageFromMockedServerSocket() throws Exception {
    mockedClient.connect(serverAddress);
    connectedClient = new ConnectedClient(mockedServerSocket.accept());
    connectedClient.sendToClientAsText("TestMessage\r\n");
    System.out.println(connectedClient.receiveFromClientAsCharStream());
  }

  @Test
  public void testConnect1() throws Exception {

  }
}


Problem:

Sobald die Methode connectedClient.receiveFromClientAsCharStream() ausgeführt wird, bleibt er in einer Schleife hängen. Ich habe derweil viel gegoogled und einiges gelesen, jedoch war keiner der Lösungsansätze trivial genug damit ich den direkt erkenne.

Ich hoffe daher, dass das Problem wirklich sehr simplen und einen "Och ja klar"-Effekt hervorruft.


Danke schonmal für jegliche Hilfe!

(Falls ihr mehr Code braucht oder Infos - nur bescheid sagen!)


Gruß Charlie
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C JSON, API ... Anfänger braucht eure Hilfe Netzwerkprogrammierung 10
D [Anfänger] POP3 SSL/TLS Netzwerkprogrammierung 4
S Fakturierungsprogramm - Daten aktuell halten (blutiger Anfänger) Netzwerkprogrammierung 1
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
M ActiveMQ Anfänger-Fehler Netzwerkprogrammierung 3
F Netzwerkprogrammierung für Anfänger Netzwerkprogrammierung 2
A array übers netzwerk (anfänger) Netzwerkprogrammierung 8
M HTTP URLConnection + BufferedReader killt meine Umlaute Netzwerkprogrammierung 4
x46 byte[] über BufferedReader auslesen Netzwerkprogrammierung 18
B Socket BufferedReader.readLine() beenden ohne den Stream zu closen Netzwerkprogrammierung 7
C Socket BufferedReader.read(char[] buffer) blockiert unregelmäßig Netzwerkprogrammierung 3
J BufferedReader.ready() wird nicht true Netzwerkprogrammierung 10
A Socket BufferedReader.readLine() blockiert bis ein im Socket OutputStream was gesendet wird ... Netzwerkprogrammierung 9
V Socket BufferedReader interrupten? Netzwerkprogrammierung 10
B Multi-Threaded block bei BufferedReader.readLine() Netzwerkprogrammierung 8
S BufferedReader blockiert zu lange Netzwerkprogrammierung 4
P eine BufferedReader für alles ankommende Netzwerkprogrammierung 2
C 2 BufferedReader als Listener pro Socket (NICHT) möglich? Netzwerkprogrammierung 2
E BufferedReader.ready() immer false Netzwerkprogrammierung 8
R Mittels BufferedReader Objekte lesen? Netzwerkprogrammierung 5
AlClemento Sockets -> BufferedReader Problem Netzwerkprogrammierung 2
C Kollision von ObjectInputStream und BufferedReader ? Netzwerkprogrammierung 6
O BufferedReader.readline kommt nicht zurück Netzwerkprogrammierung 7
F BufferedReader Socket Netzwerkprogrammierung 2
B BufferedReader.readLine() ließt nicht vollständig ! ? Netzwerkprogrammierung 5
J Vom BufferedReader lesen -> hängt ohne Fehler,ohne Except Netzwerkprogrammierung 2
D Komischer Fehler Readline() Netzwerkprogrammierung 7
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
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
E Sockets, readLine() Netzwerkprogrammierung 7
S readline-thread stoppt vorzeitig Netzwerkprogrammierung 6

Ähnliche Java Themen


Oben