tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
645
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    superomega superomega ist offline Rookie
    Registriert seit
    Jul 2010
    Beiträge
    6
    Hallo,

    mein Server und Client, die ObjectInput/OutputStreams über einen Socket benutzen, funktionieren so lange gut, bis ich versuche die Daten per BufferedInput/OutputStream zu puffern.

    Früher scheint das ja mal funktioniert zu haben, jedenfalls gibt es Beispiele im Netz dazu.
    Benutze ich den Buffer, so hängt sich das Programm beim Initialisieren des ObjectInputStream auf.

    Java: JDK 1.6.0_20-b02

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    
    public class Server implements Runnable
    {
     
      public void ServerSocketTest()
      {
     
        try
        {
     
          ServerSocket serverSocket = new ServerSocket(1212);
          Socket socket = serverSocket.accept();
     
          ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
          ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
          
          //ObjectOutputStream objectOutputStream = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream()));
          //ObjectInputStream objectInputStream = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
     
          Request request = (Request) objectInputStream.readObject();
          while (request != null)
          {
     
            Response response = new Response();
            objectOutputStream.writeObject(response);
            objectOutputStream.flush();
            objectOutputStream.reset();
            
            request = (Request) objectInputStream.readObject();
          }
        }
        catch (Exception e)
        {
          e.printStackTrace();
        }
      }
     
      public void run()
      {
        ServerSocketTest();
      }
    }

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    
    public class Client implements Runnable
    {
     
      public void SocketTest()
      {
     
        int iterations = 100;
        try
        {
          Socket socket = new Socket("localhost", 1212);
     
          ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
          ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
     
          //ObjectInputStream objectInputStream = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
          //ObjectOutputStream objectOutputStream = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream()));
     
          double start = System.currentTimeMillis();
          for (int i = 0; i < iterations; ++i)
          {
     
            Request request = new Request();
            objectOutputStream.writeObject(request);
            objectOutputStream.flush();
            objectOutputStream.reset();
     
            Response response = (Response) objectInputStream.readObject();
          }
          double finish = System.currentTimeMillis();
          System.out.println("Per ping: " + (finish - start) / iterations);
     
        }
        catch (Exception e)
        {
          e.printStackTrace();
        }
      }
     
      public void run()
      {
        SocketTest();
      }
    }

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    public class Test
    {
      public static void main(String[] argv)
      {
        Server s = new Server();
        Client c = new Client();
     
        Thread ts = new Thread(s);
        Thread tc = new Thread(c);
     
        ts.start();
        tc.start();
      }
    }

    Viele Grüße,
    Werner
     

  2. #2
    superomega superomega ist offline Rookie
    Registriert seit
    Jul 2010
    Beiträge
    6
    Die Antwort ist einfach, wenn man es weiß:

    beim Erzeugen von ObjectOutputStream jeweils einmal .flush() aufrufen.

    Grüße,
    Werner
     

Ähnliche Themen

  1. In und Outputstream
    Von DerKoenig im Forum Java
    Antworten: 2
    Letzter Beitrag: 17.01.11, 17:23
  2. OutputStream mit Zahlen > 255
    Von XanderFlash im Forum Java
    Antworten: 6
    Letzter Beitrag: 05.07.10, 21:14
  3. Problem mit OutputStream
    Von chickenwings im Forum Java
    Antworten: 2
    Letzter Beitrag: 07.04.07, 18:31
  4. OutputStream freigeben
    Von theindra im Forum Java
    Antworten: 2
    Letzter Beitrag: 08.06.05, 08:46
  5. treepath in outputstream
    Von catarock im Forum Java
    Antworten: 3
    Letzter Beitrag: 10.08.04, 13:14