Socket Kommunikation in beide Richtungen

bizkit

Mitglied
Hallo,

ich habe folgendes Problem:
Das Programm besteht aus einem Server und Client.

Client verbindet sich mit dem Server. Der Client sendet einen String (String wird von der Tastatur eingelesen) an den Server und der Server gibt einen Antwortstring auf diese Anfrage zurück.

PROBLEM: der Server gibt den eingelesenen String nicht zurück, erst wenn ich die Verbindung durch den "STOP" butten beende, dann gibt er das Eingelesen aus mit einer Fehlermeldung: java.net.SocketException: Connection reset

Könnte mir jemand helfen das Problem zu beheben?
Der Client bzw Server sollte die Abfrage von der Tastaur ohne den "STOP" Button zurück geben und ohne Fehlermeldung.

hier sind die Quellcodes:
SERVER:

Java:
import java.net.*;
import java.io.*;
import java.util.*;

public class SimpleEchoServer {
	
	  public static void main(String args[]) 
	  {
	    
	    try {
	    	while(true)
	    	{
	      System.out.println("Warte auf Verbindung auf Port 7013..2."); 

	      ServerSocket echod = new ServerSocket(7013);
	      System.out.println("Vor accept()");
	      Socket socket = echod.accept();
	     
	      System.out.println("Verbindung hergestellt");
	      InputStream in = socket.getInputStream();
	      OutputStream out = socket.getOutputStream();
	      	      
	      int c;
	      while ((c = in.read()) != -1 ) {
	    	  	System.out.print((char)c);
	    	  	out.write((char)c);
    	  }      
	      System.out.println("Verbindung beenden");
	      socket.close();
	      echod.close(); 
	    }
	    } catch (IOException e) {
	      System.err.println(e.toString());
	      System.exit(1);
	    }
	  }
	}

CLIENT:

Java:
import java.net.*;
import java.io.*;

public class SimpleEchoClient {

	public static void main(String args[])
	  {
	  System.out.println("HALLO");
	    if (args.length != 1) {
	      System.err.println("Usage: java Listing 7013 <host>");
	      System.exit(1);
	    }
	    try {
	  	// String hostname = args[0]; 
	    //  int portnr = new Integer(args[1]).intValue();
			Socket sock = new Socket(args[0], 7013);		
	   //   Socket sock = new Socket(hostname, portnr);	
	    	InputStream in = sock.getInputStream();
	    	OutputStream out = sock.getOutputStream();
	    	    	
	    	BufferedReader conin = new BufferedReader(new InputStreamReader(System.in));
	    	System.out.println("Gebe was ein!");
	    	
	    	String line;
	    	line = conin.readLine();
	    	out.write(line.getBytes());
	    	
	    	BufferedReader buffin = new BufferedReader(new InputStreamReader(in)); 
	    	String ausgText = buffin.readLine();
	    	System.out.println(ausgText);
	    
	    	System.out.println("BLOCK4");
	     
	    	in.close();
	    	sock.close();   
	    } catch (IOException e) {
	      System.err.println(e.toString());
	      System.exit(1);
	    }
	  }
	}
 
S

SlaterB

Gast
dazu darauf achten, auch einen Zeilenumbruch zu senden, wenn der später mit readLine() gelesen werden soll,

readLine() liefert immer die Zeile ohne Zeilenumbruch, den manuell anhängen, \n
 

bizkit

Mitglied
es muss irgendwie ohne flush() gehen.

in der Vorlesung hat der Professor das Programm ohne flush() laufen gehabt.
nur kann ich mich leider nicht mehr erinnern wie.
 
S

SlaterB

Gast
siehe auch mein Posting zuvor,

mag sein dass nach paar ms eh gesendet wird, verlassen würde ich mich aber nicht drauf,
meiner Erfahrung nach ist flush() manchmal der entscheidende fehlende Schritt,
nimm das lieber auf, statt es aus zweifelhaften Gründen einzusparen
 

diggaa1984

Top Contributor
Einfach nach write aufrufen. Beim Server kannst dir dann überlegen, ob es in die while-Schleife oder besser dahinter kann. Kommt drauf an welches Verhalten erwünscht ist.
 

bizkit

Mitglied
es funktionier nicht.

oder ich habe was falsch gemacht
hier sind die aktuellen codes:

SERVER:
Java:
import java.net.*;
import java.io.*;
import java.util.*;

public class SimpleEchoServer {
	
	  public static void main(String args[]) 
	  {
	    
	    try {
	    	while(true)
	    	{
	      System.out.println("Warte auf Verbindung auf Port 7013..2."); 

	      ServerSocket echod = new ServerSocket(7013);
	      System.out.println("Vor accept()");
	      Socket socket = echod.accept();
	     
	      System.out.println("Verbindung hergestellt");
	      InputStream in = socket.getInputStream();
	      OutputStream out = socket.getOutputStream();
	      	      
	      int c;
	      while ((c = in.read()) != -1 ) {
	    	  	System.out.print((char)c);
	    	  	out.write((char)c);
	    	  //	out.flush();
	      }      
	    
	      out.flush();
	      
	      socket.close();
	      echod.close(); 
	    
	    	}
	    } catch (IOException e) {
	      System.err.println(e.toString());
	      System.exit(1);
	    }
	  }
	}

CLIENT:

Java:
import java.net.*;
import java.io.*;

public class SimpleEchoClient {

	public static void main(String args[])
	  {
	  System.out.println("HALLO");
	    if (args.length != 1) {
	      System.err.println("Usage: java Listing 7013 <host>");
	      System.exit(1);
	    }
	    try {
	  	// String hostname = args[0]; 
	    //  int portnr = new Integer(args[1]).intValue();
			Socket sock = new Socket(args[0], 7013);		
	   //   Socket sock = new Socket(hostname, portnr);	
	    	InputStream in = sock.getInputStream();
	    	
	    	
	    	
	    	OutputStream out = sock.getOutputStream();
	    	    	
	    	BufferedReader conin = new BufferedReader(new InputStreamReader(System.in));
	    	System.out.println("Gebe was ein!");
	    	
	    	String line;
	    	line = conin.readLine();
	    	out.write(line.getBytes());
	    	out.flush();
	    	
	    	BufferedReader buffin = new BufferedReader(new InputStreamReader(in)); 
	    	String ausgText = buffin.readLine();
	    	System.out.println(ausgText);
	    	     
	    	in.close();
	    	sock.close();   
	    } catch (IOException e) {
	      System.err.println(e.toString());
	      System.exit(1);
	    }
	  }
	}
 
S

SlaterB

Gast
zwei Tipps wurden gegeben, einer eingebaut, einer nicht (auch keine Rücfrage),
Ergebnis ist verdient ;)
 

bizkit

Mitglied
:)
ehrlich gesagt, weiß ich auch nicht wie ich das mit readLine() mache.

ich habe gehofft, dass es ohne gehen würde, da es mir peinlich ist, sowas zufragen:oops:
 
S

SlaterB

Gast
funktioniert es wenn du
> line = conin.readLine();
mit
> line = conin.readLine()+"\n";
ersetzt?
 

diggaa1984

Top Contributor
EDIT: schieb auf der Serverseite auch ein "\n" als letztes in den Outputstream, damit der Client beim Auslesen des Echos auch ein Ende findet (da du dort auch readLine verwendest)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
izoards Socket Kommunikation Java Basics - Anfänger-Themen 16
F Socket Kommunikation Java Basics - Anfänger-Themen 4
Nina Pohl Ein Vorgang bezog sich auf ein Objekt, das kein Socket ist Java Basics - Anfänger-Themen 6
G Socket Verbindung aufbauen Java Basics - Anfänger-Themen 11
S Bilder über Socket Senden Java Basics - Anfänger-Themen 1
S Asynchrone Socket-Abfragen Java Basics - Anfänger-Themen 5
Meeresgott OOP Socket Verbindung richtig Kapseln Java Basics - Anfänger-Themen 0
O Socket by reference übergeben Java Basics - Anfänger-Themen 0
J Socket schließen - Ist eine SocketException unumgänglich? Java Basics - Anfänger-Themen 4
D Socket ---> Server Socket worauf muss ich achten? Java Basics - Anfänger-Themen 2
N Socket-Programmierung Java Basics - Anfänger-Themen 4
M wait/notify bei Socket Java Basics - Anfänger-Themen 4
B Input/Output Socket I/O - outputStream.write(-1) Java Basics - Anfänger-Themen 2
B Socket OutputStream Java Basics - Anfänger-Themen 17
B Socket, args Java Basics - Anfänger-Themen 22
L Socket in JTextArea Java Basics - Anfänger-Themen 9
T Input/Output Zwei InputStreams von einem Socket Java Basics - Anfänger-Themen 2
B Socket Problem Java Basics - Anfänger-Themen 3
T socket.close aber verbindung besteht noch Java Basics - Anfänger-Themen 4
F Buffered Image über Socket versenden Java Basics - Anfänger-Themen 6
E Socket InputStream "terminiert" nicht Java Basics - Anfänger-Themen 4
B Threads Interrupt während Socket.read()? Java Basics - Anfänger-Themen 3
M Versand von Nachrichten via Socket (Delay) Java Basics - Anfänger-Themen 21
F socket-problem Java Basics - Anfänger-Themen 6
E Input/Output Socket bekommt keine Verbindung bei funktionierendem Fremdziel Java Basics - Anfänger-Themen 2
E Socket (Client) dauerhaft aktiv? Java Basics - Anfänger-Themen 9
D Java - Socket - Datenübertragung Java Basics - Anfänger-Themen 18
E Input/Output einfachen Socket für XML-Anfragen bauen Java Basics - Anfänger-Themen 13
R Cannot find a free socket for the debugger Java Basics - Anfänger-Themen 6
M "Connection reset" gbxRemote Socket Java Basics - Anfänger-Themen 9
N Files mit Byte an Socket versenden Java Basics - Anfänger-Themen 2
L FTP per Socket Java Basics - Anfänger-Themen 2
M Audio Stream läuft auf :connection abort: socket write error Java Basics - Anfänger-Themen 2
J Socket - BufferedReader lese Problem Java Basics - Anfänger-Themen 2
M Socket Server Java Basics - Anfänger-Themen 9
N Socket Problem? Java Basics - Anfänger-Themen 9
G Socket erstellen dauert sehr lange. Java Basics - Anfänger-Themen 4
H Java Socket Java Basics - Anfänger-Themen 14
A XML Daten über Socket Java Basics - Anfänger-Themen 3
I Allgemeine fragen zu Socket server Java Basics - Anfänger-Themen 6
C Socket Programmierung Java Java Basics - Anfänger-Themen 4
F Socket Instanz auf Klasse welche von Socket erbt zuweisen Java Basics - Anfänger-Themen 3
ven000m Wieso antwortet mein Server nicht mehr (Socket Anwendung) Java Basics - Anfänger-Themen 2
J Daten von einem (char*)Socket einlesen. Java Basics - Anfänger-Themen 3
S Java Socket Java Basics - Anfänger-Themen 3
K Frage zu SdtOut streams bzw. Socket Programmierung Java Basics - Anfänger-Themen 3
M HTTP-Anfragen und Socket Java Basics - Anfänger-Themen 2
A von Socket-Stream lesen Java Basics - Anfänger-Themen 4
M Ändern einer Socket-Eigenscheft aus einem modalen Dialog? Java Basics - Anfänger-Themen 6
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
I Kommunikation "normaler PC" mit lokaler Software an "Cloud Service" und umgekehrt Java Basics - Anfänger-Themen 15
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
A Client-Server Kommunikation Java Basics - Anfänger-Themen 3
S JavaFX-Arduino Kommunikation mit LCD-Anzeige Java Basics - Anfänger-Themen 0
A Kommunikation zwischen nebenläufigen Threads Java Basics - Anfänger-Themen 4
F Klassen Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 4
M Input/Output Kommunikation mit externen Geräten Java Basics - Anfänger-Themen 0
M OOP Kommunikation MVC und DTO Java Basics - Anfänger-Themen 13
K Kommunikation von Java RMI und Webservices Java Basics - Anfänger-Themen 9
H Einfache Client/Server-Kommunikation Java Basics - Anfänger-Themen 16
E MVC: Kommunikation der Modellteile Java Basics - Anfänger-Themen 12
G Klassen Kommunikation zw. Klassen Java Basics - Anfänger-Themen 28
G Server-Client Kommunikation Java Basics - Anfänger-Themen 3
G Kommunikation zwischen zwei Klassen Java Basics - Anfänger-Themen 5
J Panel-übergreifende Kommunikation Java Basics - Anfänger-Themen 3
P Kommunikation zwischen zwei *.class Java Basics - Anfänger-Themen 3
J RxTx/RS232 Kommunikation (TwoWay) Java Basics - Anfänger-Themen 10
Z Tomcat Server Kommunikation zu Client Applet Java Basics - Anfänger-Themen 5
G Datenstruktur und die Kommunikation mit der GUI Java Basics - Anfänger-Themen 10
W Inter-Thread-Kommunikation Java Basics - Anfänger-Themen 3
M Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 3
T Kommunikation zwischen Controller und GUI Java Basics - Anfänger-Themen 2
S Frage zur Kommunikation zwischen Objekten Java Basics - Anfänger-Themen 5
J Kommunikation zwischen zwei JAVA-Dateien Java Basics - Anfänger-Themen 8
T Kommunikation zw. 2 Javaprogrammen Aufr --> Verab. -> Java Basics - Anfänger-Themen 6
P Kommunikation mit Prozess Java Basics - Anfänger-Themen 3
H Kommunikation C++ <> Java Java Basics - Anfänger-Themen 4
A Kommunikation Java-Anwendung <-> Java-Applet Java Basics - Anfänger-Themen 24
V Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 2
S Kommunikation zwischen Komponenten in einem JFrame Java Basics - Anfänger-Themen 10
D Thread und Process Kommunikation bei eigener Console Java Basics - Anfänger-Themen 2
P asynchrone Kommunikation Applet Servlet mit RMI möglich Java Basics - Anfänger-Themen 4
B Kommunikation zwischen Klasse und Listener Java Basics - Anfänger-Themen 2
F Kommunikation von 2 Klasse Java Basics - Anfänger-Themen 5
L Kommunikation zwischen mehreren Klassen Java Basics - Anfänger-Themen 2
B jtapi <-> tapi Kommunikation Java Basics - Anfänger-Themen 2
D Kommunikation zwischen zwei Java Anwendungen möglich? Java Basics - Anfänger-Themen 6
S Kommunikation zwsichen Klassen. Java Basics - Anfänger-Themen 9
D J/Direct oder JNI? .bzw. Kommunikation mit Windows-API. Java Basics - Anfänger-Themen 2
G Nochmal Problem mit Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 3
G Kommunikation zwischen Klassen, aber bitte MVC Java Basics - Anfänger-Themen 12
G Kommunikation zwischen Applet und Java-Anwendung über TCP/IP Java Basics - Anfänger-Themen 3
M Kommunikation zwischen GUI und Event -Klasse Java Basics - Anfänger-Themen 3
M probleme in der kommunikation von klassen Java Basics - Anfänger-Themen 5
Q Kommunikation zwischen Frames Java Basics - Anfänger-Themen 3
CptK Interface Beide Panels zeigen das Gleiche Java Basics - Anfänger-Themen 2
A Klassen Geschachtelte Klassen - Hat das Objekt dann beide Klassen? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben