Problem mit Socket-Verbindung

M

Marco123

Gast
Hallo,

ich schreibe gerade eine einfache Client-Server-Anwendung, bei der Nachrichten per PrintWriter und BufferedReader zwischen Server und Client hin- und hergeschickt werden sollen.

Sowohl Server als auch Client enthalten dafür die folgenden beiden Methoden, denen jeweils der vorher erzeugte Socket, über den sich Client und Server verbunden haben, übergeben wird:

Java:
// Methode, die eine Nachricht per PrintWriter in den Socket schreibt
  private void schreibe (Socket s, String nachricht) {
    try {
      // PrintWriter erzeugen
      PrintWriter pWriter =
        new PrintWriter(
          new OutputStreamWriter(
            s.getOutputStream() ));   
      // Nachricht senden
      pWriter.print(nachricht);
    }
    catch (IOException e) {
      System.out.println("IOException!");
    }
  }
  
  // Methode, die eine Nachricht per BufferedReader aus dem Socket einliest und an die aufrufende Methode zurückgibt
  private String lese (Socket s) {
    // Paltzhalter für die zu empfangende Nachricht
    String nachricht = "";
    try {
      // BufferedReader erzeugen
      BufferedReader bReader =
        new BufferedReader(
          new InputStreamReader(
            s.getInputStream() ));
      // Nachricht empfangen
      nachricht = bReader.readLine();
    }
    catch (IOException e) {
      System.out.println("IOException!");
    }
    // Nachricht zurückgeben
    return nachricht;
  }

Wenn ich das Programm mit diesen Methoden ausführe, sendet der Client eine Nachricht an den Server. Die Server-Anwendung empfängt die Nachricht jedoch nicht und bleibt einfach "stehen".

Nun habe ich schon eine Weile gegooglet und herausgefunden, dass ich die schreibe-Methoden nach dem Senden der Nachricht um ein
Code:
pWriter.close();
ergänzen muss.

Obwohl ich nicht ganz verstanden habe warum, wird die Nachricht nun vom Server empfangen und dieser schickt eine Nachricht an den Client zurück. Jetzt empfängt der Client die Nachricht jedoch nicht mehr (bzw. nur noch eine leere Nachricht), mit der Begründung "Socket is closed". Scheinbar wurde beim Schließen des PrintWriters gleich der ganze Socket geschlossen, den ich jedoch für die weitere Kommunikation zwischen Client und Server noch brauche.

Gibt es eine Möglichkeit den PrintWriter zu schließen (warum muss man das überhaupt tun?), ohne den Socket mit zu schließen?
 

Lumaraf

Bekanntes Mitglied
  1. readLine() liest Daten bis ein Zeilenumbruch kommt oder der Stream geschlossen wird der Aufruf pWriter.print(nachricht); läßt vermuten das der erwartete Zeilenumbruch nie kommt.
  2. BufferedReader und InputStreamReader lesen unter Umständen mehr Daten aus dem Socket als in dem Aufruf der lese(Socket) Methode verarbeitet werden. Es sollte für das Socket nur einmal ein BufferedReader erzeugt werden der dann für alle lesenden Zugriffe auf das Socket verwendet wird.
  3. Die Klasse PrintWriter gibt die Daten nur an den OuputStreamWriter weiter wenn ein Zeilenumbruch geschrieben wird, PrintWriter.flush() aufrufen wird oder der PrintWriter via PrintWriter.close() geschlossen wird.
 
D

despikeexd

Gast
mal davon abgesehen das solche blockierenden methoden eh in getrennten threads ablaufen sollten ...
aber ein einfaches client-server - chat-beispiel liefert google zu hauf ... nur das mit dem Stream.close() ist lustig ... probiers mal aus und beobachte das verhalten ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
I Problem bei Outputstreamerzeugung in anderer Klasse als Socket Netzwerkprogrammierung 5
J Socket Problem -Proxies Netzwerkprogrammierung 2
Y Problem mit ObjectInputStream beim lesen vom Socket Netzwerkprogrammierung 10
E Problem mit Socket und fe80 (IPv6) Netzwerkprogrammierung 9
G 1 Socket 2 Threads problem Netzwerkprogrammierung 13
musiKk Problem bei bidirektionaler Nutzung eines Socket Netzwerkprogrammierung 2
P Problem mit Socket und ServerSocket Netzwerkprogrammierung 2
S Socket problem Netzwerkprogrammierung 2
J socket.close() Problem ----- java.net.BindException Netzwerkprogrammierung 4
Icewind Problem bei Socket Netzwerkprogrammierung 2
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 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
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
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
O 4Gewinnt Multiplayer - Netzwerk Problem (TCP) Netzwerkprogrammierung 1
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
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
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
J Facelets Include Rendered Problem Netzwerkprogrammierung 2
J Socket Problem mit C++/Java Netzwerkprogrammierung 20
P Problem mit Datagram-Sockets Netzwerkprogrammierung 2
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
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
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
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
M Problem beim Datenempfang Netzwerkprogrammierung 2
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
N NIO Problem beim speziellen Behandeln von einzelnen Benutzern Netzwerkprogrammierung 13
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
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
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6
T Problem bei Findung der richtigen Architektur Netzwerkprogrammierung 3
AlexSpritze Authentication Problem bei WebServices Netzwerkprogrammierung 4
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
R RMI Hibernate Problem Netzwerkprogrammierung 4
Z RMI Problem Netzwerkprogrammierung 11
F RMI problem mit RMI Netzwerkprogrammierung 3
H Object Cast Problem nach Übertragung mit Log4j Netzwerkprogrammierung 5
H Log4j SocketAppender Problem Netzwerkprogrammierung 2
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
P Problem mit JOscarLib Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben