problem beim schließen eines Streams

Status
Nicht offen für weitere Antworten.

PrinzMartin

Aktives Mitglied
Moin Moin ich habe einen Server und dort gibt es einen Thread, der immer wenn von einem Client eine Nachricht kommt, diese an alle anderen senden.........

soweit so bevor der Quelltext kommt noch ein paar erläuterungen zu eben diesen...

falls ihr euch über die eingabe wundert, das soll das empfangen einer Nachricht darstellen, da momentan der Client noch nicht so ausgereift ist.... also alles was jetzt eintritt sobald was eingegeben wurde, soll später eintreten wenn der Client sendet....

Das ganze läuft aber noch nicht so richtig denn wenn ich mir die Exception in der senden Methode ausgeben lasse kommt da als Fehler:

java.net.SocketException: Socket is closed

und das nicht einmal sondern naja als ob ich es in einer while schleife ausgebe......... und das kommt nur, wenn ich das

out.close; da stehen habe ansonsten kommt der fehler nicht, aber beim Client auch nix an, da der nicht erkennt, dass die gesendete Zeile zu ende ist..

ich wunder mich, da out.close(); ja eigentlich den Outputstream schließen soll und nicht den socket....
außerdem wenn ich mir in der Exception mal statt der Exception "socket" ausgeben lasse, dann kommt der ganz normal also kein [unconected] oder ähnliches...

Code:
/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 14.10.2007
  * @author
  */
import java.lang.*;
import java.io.*;
import java.net.*;
import java.util.Scanner;

public class tRead implements Runnable
{

  // Anfang Variablen
  cList socket_list;
  Socket socket;
  BufferedReader in;
  PrintWriter out;
  String msg;
  Scanner eingabe;
  // Ende Variablen

  // Anfang Ereignisprozeduren
  public tRead(cList pList, Socket pSocket)
  {
    this.socket_list = pList;
    this.socket = pSocket;
    eingabe = new Scanner(System.in);
  }
  
  public void run()
  {

    try
    {
      in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

      
      System.out.println("gib was ein um zu senden");
      msg = eingabe.next();
      System.out.println("hast gut eingegeben");
      
         //while (!in.ready()) {}        //**********das soll nachher die eingabe ersetzen
         senden();
      
    } catch (IOException e)
    {
        
    }

  }
  
  public void senden()
  {

    socket_list.toFirst();
    while(!socket_list.isBehind())                  //**************hier sind alle sockets drin gespeichert....
    {
      try
      {
        socket = (java.net.Socket)socket_list.getItem();        
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        out.write("hallo meine welt");

        System.out.println(String.valueOf(socket_list.getItem())+"   Message: "+msg);
        socket_list.next();
        out.close();                                     //*********ja hier scheint das problem zu sein aber ich muss den
                                                             //*********Stream ja schließen, damit readLine ein ende erkennt
       } catch (IOException e)                     
      {
        System.out.println(e);                    //*********naja die Exception sagt das der socket "geclosed" ist
      }
    }
  }

  // Ende Ereignisprozeduren
}


Außerdem, wenn ich einen Client habe funktioniert es ganz wunderbar, es funktioniert eigentlich auch bei mehreren Clients da kommt dann zwar die Exception aber er sendet ganz brav...

und mich wundert, dass ich erst beide eingaben machen muss (bei zwei clients) bevor der die senden methode aufruft....

eigentlich sollten die Threads doch nebeneinander ablaufen und wenn ich dann eine eingabe mache, müsste es doch in dem Thread weitergehen oder ?



ich hoffe ich mache euch nicht zu viel Arbeit und ihr wisst hilfe ich sitz da schon seit heute morgen dran

grazie in anticipo
 

PrinzMartin

Aktives Mitglied
hab ich auch gedacht das tuts nicht vllt weil ich einen PrintWriter benutze?

soll ich eher den BufferedWriter nehmen? aber in dem Server beispiel war es ein PrintWriter deshalb hab ich den übernommen....................


aber wie gesagt ist das ganze programm krumm da der eine Thread auf den anderen zu warten scheint.......

wie gesagt wenn ich zwei clients starte steht da halt zweimal

bitte was eingeben um zu senden

is ja klar, da ich für jeden Thread jetzt eine eingabe machen muss damit es weitergeht...

wenn ich jetzt aber eine eingabe mache, müsste doch ein Thread weitermachen und senden oder?
Das tut er aber nicht es geht erst weiter, wenn ich auch für den zweiten Thread eine eingabe mache...
 

PrinzMartin

Aktives Mitglied
Ich gebe mal den Client hier an, da das die gleiche Exception ist, aber nur eine klasse also vllt einfacher den Fehler zu finden:

Code:
import java.lang.*;
import java.io.*;
import java.util.*;
import java.net.*;

class Client {
   public static void main(String args[]) {
      try {
          Socket socket = new Socket("localhost", 1234);

          PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

          System.out.print("Received string: ");
          Scanner eingabe;
          eingabe = new Scanner(System.in);
          String msg;
          msg = eingabe.next();
          out.write(msg);
          out.close();

         System.out.println("gesendet");

         BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
         //********wenn ich den BufferedReader am anfang der Klasse erstelle also unter dem PrintWriter
         //********dann gibt es keinen Fehler aber er sendet auch nicht........ 
         //********auch out.flush() erzielt keine wirkung ich weiß echt nicht mehr weiter..
         while (!in.ready()) {}
         System.out.println(in.readLine()); // Read one line and output it

         System.out.print("\n");

         in.close();
      }
      catch(IOException e) {
         System.out.print(e);
      }
   }
}
 

PrinzMartin

Aktives Mitglied
Es wird immer komischer wenn ich beim Client statt out.close();
out.flush() nehme, dann geht es der Server erkennt, das was gesendet wurde geht an der while(!readLine.in){} schleife vorbei und sendet dann...................

wenn ich allerdings beim Server out.flush(); nehme, dann geht er nicht an der while(!readLine.in){} schleife vorbei...

Ich glaub ich muss den ganzen Code noch mal durchgehen ich blick echt nicht mehr durch...


Außerdem kommt immer noch bei manchen Server Client konstellationen die meldung, dass der socket geschlossen ist oder ne andere meldung, dass ne verbindung nicht klappt............... dabei wird der socket im gesamten programm nicht beendet in keinster weise....... ich glaub ich mach jetzt noch meine Deutsch LK Hausaufgaben vllt kommt dann ja ne lösung in mein Hirn :( oder ihr wisst hilfe

danke schon mal



:meld: :meld: :meld: EEEDDDIIITTT : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Soooooo alle probleme gelöst, ich verstehe es immer noch nicht aber ich sende einfach einen Zeilenumbruch das hilft...
also

Code:
out.println();

Das scheint wunderbar zu laufen...
 
T

tuxedo

Gast
Wenn der Server keinen Zeilenumbruch sendet, du aber beim Client auf einen Zeilenumbruch wartest, ist das doch klar, oder?
 

PrinzMartin

Aktives Mitglied
naja wenn ich das .close() benutzt habe, dann hat der ja auch gemerkt, dass ende ist und vom Client aus ging ja .flush(); dann hat der auch gemerkt, dass jetzt die Zeile zu ende ist.

Nur vom Server zum Client ging .flush(); ja nicht was mich halt gewundert hat und auf die einfachste Lösung bin ich halt nicht gekommen^^ aber das nächste Problem kommt bestimmt :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
M Problem beim Datenempfang Netzwerkprogrammierung 2
N NIO Problem beim speziellen Behandeln von einzelnen Benutzern Netzwerkprogrammierung 13
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6
Y Problem mit ObjectInputStream beim lesen vom Socket Netzwerkprogrammierung 10
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
I Problem beim empfangen von Daten (Zahlen) Netzwerkprogrammierung 7
Rontu Problem beim Übertragen einer Datei Netzwerkprogrammierung 9
J Problem beim Senden von File Netzwerkprogrammierung 4
V Problem beim Senden von Dateien Netzwerkprogrammierung 4
C Session Problem beim Zugriff auf Webseiten Netzwerkprogrammierung 3
I Apache http-client: Problem beim Proxyaufruf Netzwerkprogrammierung 2
C RMI: Problem beim Aufruf einer Methode. Falsch gecastet? Netzwerkprogrammierung 8
D Problem beim holen einer PHP-Seite via HttpClient Netzwerkprogrammierung 19
J Problem beim versenden von eigenen Objekten über RMI Netzwerkprogrammierung 2
R Problem beim Senden von Emails (Javamail) Netzwerkprogrammierung 2
M problem beim schicken von XML-DAtenpacketen via TCP Netzwerkprogrammierung 3
D Performance Problem beim File senden, empfangen Netzwerkprogrammierung 4
I Socket Problem mit den WebSocket Antworten der Discord API Netzwerkprogrammierung 0
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
C RMI Produzent-Verbraucher-Problem - Code review Netzwerkprogrammierung 12
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2
S Problem bei dem Bluetoothverbindungsaufbau Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
M Netty - TCP Problem Netzwerkprogrammierung 4
L Socket Problem mit Server Netzwerkprogrammierung 1
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
M Socket CDI, Websocket reference Problem ! Netzwerkprogrammierung 2
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
G apache httpClient Problem. Netzwerkprogrammierung 5
H Problem mit ObjectStreams Netzwerkprogrammierung 3
D Socket BufferedWriter/Reader Problem Netzwerkprogrammierung 1
Maxim6394 Problem mit Socks5 Implementierung Netzwerkprogrammierung 0
C Handle Connection Problem Netzwerkprogrammierung 3
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
O 4Gewinnt Multiplayer - Netzwerk Problem (TCP) Netzwerkprogrammierung 1
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
E einfaches Problem: Session-Handling bei Servlets Netzwerkprogrammierung 5
G Problem mit einem FileWatcher Netzwerkprogrammierung 7
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
B Client/Server Connection Problem Netzwerkprogrammierung 2
G Problem mit STATIC-Verständnis Netzwerkprogrammierung 8
J Facelets Include Rendered Problem Netzwerkprogrammierung 2
J Socket Problem mit C++/Java Netzwerkprogrammierung 20
P Problem mit Datagram-Sockets Netzwerkprogrammierung 2
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 7
B Socket Problem mit Netzwerkchat Netzwerkprogrammierung 21
Maxim6394 ipv6 Problem Netzwerkprogrammierung 2
Maxim6394 Proxyserver Performance Problem Netzwerkprogrammierung 11
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 5
B RMI und Problem mit rmic-Tool Netzwerkprogrammierung 3
C FTP storeFileStream Problem Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
D JavaMail - Mailsabrufen Problem (imap) Netzwerkprogrammierung 12
J HTTP Übersetzung yahoo babelfish - Zeichensatz-Problem Netzwerkprogrammierung 6
D Apache CXF, JAX-WS Problem bei Arrays - einfacher Server Netzwerkprogrammierung 2
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
D Thread problem Netzwerkprogrammierung 3
T Servlets JSP: Tomcat Problem Netzwerkprogrammierung 4
K Client - Server Problem Netzwerkprogrammierung 16
T RMI Problem Client-Server Netzwerkprogrammierung 2
P RMI Stub Problem Netzwerkprogrammierung 3
D Socket UDP Übertragungs Problem Netzwerkprogrammierung 7
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
D Problem mit ObjectInputStreams Netzwerkprogrammierung 10
D Socket Problem mit InputStreamReader Netzwerkprogrammierung 3
N CRC32 CheckSum Problem bei UDP Netzwerkprogrammierung 2
V Java Mail Api - IMAP Problem Netzwerkprogrammierung 6
P RMI Problem Netzwerkprogrammierung 4
I Problem bei Outputstreamerzeugung in anderer Klasse als Socket Netzwerkprogrammierung 5
S Socket Problem mit Objektübertragung Netzwerkprogrammierung 16
Shoox Reader / Writer Problem Netzwerkprogrammierung 2
S Problem mit 2 Serversockets unter Win XP Netzwerkprogrammierung 7
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
M RMI - Connection Problem Netzwerkprogrammierung 7
J Socket Client - Server Problem Netzwerkprogrammierung 4
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
T Problem bei Findung der richtigen Architektur Netzwerkprogrammierung 3
AlexSpritze Authentication Problem bei WebServices Netzwerkprogrammierung 4
J Socket Problem -Proxies Netzwerkprogrammierung 2
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
F Konzept Problem Netzwerkprogrammierung 12
G NIO Sockets Architektur Problem Netzwerkprogrammierung 2
H Neues NIO problem nachricht an alle clients Netzwerkprogrammierung 3
J Client server problem Netzwerkprogrammierung 3
S Problem bzgl. Sockets / Server-Client-Struktur Netzwerkprogrammierung 3
W RMI Problem Netzwerkprogrammierung 4
M Problem mit Server Netzwerkprogrammierung 5
N Socket Java server c# client problem Netzwerkprogrammierung 7

Ähnliche Java Themen


Oben