# OutputStreamWriter funktioniert nicht wie ich will



## Senate (10. Nov 2006)

Guten Abend.
vor lauter Writer, Reader, inputstreams outputstream gebuffert oder nicht raff ich jetzt nichts mehr.

Mein programm funktioniert so ganz gut...
der Client schickt dem Server nen Dateiname mit pfad zB: c:/test.txt
und der server guckt bei sich ob er die datei hat und gibt dann den inhalt der datei aus.
kling einfach ist aber nicht so!!! oder ich habs nicht drauf.
Client: 

```
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import sun.security.krb5.internal.s;

public class Client 
{
	public static void main(String[] args)
	{
			String decision = null;
			//dient zur späteren abfrage der entscheidung
			do //für eingabe fehler (siehe schleifen ende)
			{
			System.out.println("add zum addieren zweier Zahlen\nmul zu Mutliplizieren zweier zahlen\nsuche zum durchsuchen einer Datei");
			System.out.println("Bitte add, mul oder suche eingeben: ");
			BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );
			//Dekleration von reader vom Typ BufferedReader 
			try 
			{
				decision=reader.readLine();
				//einlesen in decision (die entscheidung des Users
			} 
			catch (IOException e1) 
			{
				e1.printStackTrace();
			}
			}while(!decision.equals("add") && !decision.equals("mul") && !decision.equals("suche"));
			
			if(!decision.equals("suche"))
			{
				BufferedReader term1 = new BufferedReader( new InputStreamReader( System.in ) );
				BufferedReader term2 = new BufferedReader( new InputStreamReader( System.in ) );	
				String wert1= null;
				String wert2=null;
				//Dekleration der einzulesenden werte
				try
				{
				System.out.println("1. Wert eingeben: ");
				wert1=term1.readLine();	
				//wert1 wird eingelsen über BufferReader
				}
				catch (IOException e1) 
				{
				e1.printStackTrace();
				}
				try
				{
				System.out.println("2. Wert eingeben: ");
				wert2=term2.readLine();	
				//wert2 wird eingelsen über BufferReader
				}
				catch (IOException e1) 
				{
				e1.printStackTrace();
				}
			
				int i_wert1, i_wert2;
				i_wert1= Integer.parseInt(wert1);
				i_wert2= Integer.parseInt(wert2);
				//Convert to Integer
			 	
				try
			 	{	
				Socket clientSocket = new Socket ("localhost", 4711);
				DataOutputStream output = new DataOutputStream ( clientSocket.getOutputStream());
				DataInputStream input = new DataInputStream ( clientSocket.getInputStream());
				//eröffnen des Sockets und ausgabe und 
				output.writeUTF(decision);
				output.write(i_wert1);
				output.write(i_wert2);
				//Senden an den Server, der Entscheidung und die Werte
				int erg = input.read ();
				//einlesen der Rückgabe des Servers
				System.out.println("Ergebniss: "+ erg) ;
				//ausgabe des Ergebnisses
				clientSocket.close();
				//schliesen der Verbindung
			 	}
			 	catch (UnknownHostException e)
			 	{
				System.out.println("falscher Host"+ e.getMessage());
				}
			 	catch (EOFException e)
			 	{ 
				System.out.println("Verbindung wurde beendet!");
				}
			 	catch (IOException e)
			 	{
			 	System.out.println(" IO:"+ e.getMessage());
				}
			}
			else
			{
				Socket clientSocket_aaa;
				try {
					clientSocket_aaa = new Socket ("localhost", 4711);
					DataOutputStream output_aaa = new DataOutputStream ( clientSocket_aaa.getOutputStream());
					output_aaa.writeUTF("else");
					clientSocket_aaa.close();
				} catch (UnknownHostException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
				
				try
			 	{	
				Socket clientSocket = new Socket ("localhost", 4711);
				BufferedWriter output = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
				BufferedReader input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
				BufferedReader eingabe = new BufferedReader( new InputStreamReader( System.in ) ); 
				String dateiname;
				System.out.println("Bitte Vollständigen Pfad eingeben: ");
				dateiname = eingabe.readLine();	
				output.write(dateiname);
				output.newLine();
				output.flush();
				String ausgabe= input.readLine();
					while(!(ausgabe.equals("complete")))
					{
						System.out.println(ausgabe);
						ausgabe = input.readLine();
					}				
			 	}
				catch (UnknownHostException e)
			 	{
				System.out.println("falscher Host"+ e.getMessage());
				}
			 	catch (EOFException e)
			 	{ 
				System.out.println("Verbindung wurde beendet!");
				}
			 	catch (IOException e)
			 	{
			 	System.out.println(" IO:"+ e.getMessage());
				}
			}
	}
}
```

Server:

```
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server 
{

	public static void main(String[] args) 
	{
		try
		{
			System.out.println("Server ist On");
			ServerSocket serverSocket = new ServerSocket (4711);
			//Server wird erstellt
			Socket clientSocket = serverSocket.accept();
			//zum zurücksenden
			System.out.println("Verbindung hergestellt");
			//Server erstellt und akzeptiert Verbinung
			DataOutputStream output = new DataOutputStream ( clientSocket.getOutputStream() );
			DataInputStream input = new DataInputStream ( clientSocket.getInputStream() );     
			String decision = input.readUTF ();
			int i_wert1,i_wert2;
			// Dekleration der eingabe Variablen
			if(decision.equals("add")) 
			{// wenn Die Entscheidung add war wird folgendes ausgeführt
				i_wert1=input.read();
				i_wert2=input.read(); 
				output.write(i_wert1+i_wert2); 
				//einlesen, addition und zurücksenden, der Werte, an den
				//Client
			}
			if(decision.equals("mul"))
			{//wenn die Entscheidung mul war wird folgendes ausgeführt
				i_wert1=input.read();
				i_wert2=input.read(); 
				output.write(i_wert1*i_wert2); 
				//einlesen, multiplizieren und zurücksenden, der Werte
				//an den Client
			}
			else
			{
				BufferedWriter outputWr = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
				try
				{
				BufferedReader b_input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
				String eingabe = b_input.readLine();
				File dateiname = new File(eingabe);
				BufferedReader dateilese = new BufferedReader(new FileReader(dateiname));
				String inhalt = dateilese.readLine();
				String neu_inhalt = "";
				while((inhalt) != null ) 	
				{
				neu_inhalt = neu_inhalt + inhalt + '\n';
				inhalt = b_input.readLine();
				}
				outputWr.write(neu_inhalt);
				}
				catch(FileNotFoundException e) // Wenn Datei nicht existiert!
				{
				outputWr.write("Die Datei existiert nicht! ");
				outputWr.newLine(); 
				outputWr.flush();
				System.exit(1); //
				}
			}
			clientSocket.close();
			serverSocket.close();
			//schließen der Verbindung
		} 
		catch( IOException e) 
		{
			System.out.println(" Listen :"+ e.getMessage());
		}
	}
}
```


----------



## Murray (10. Nov 2006)

Und was genau war jetzt das Problem?


----------



## Senate (10. Nov 2006)

IO:Software caused connection abort: recv failed

ich kann dem server keinen Dateipfad mit datei schicken.
dann kommt bei mir eine client Exception


----------

