Socket Run Args Client/Server Socket

derda

Neues Mitglied
Hi, bin neu hier, also falls das Thema schon existiert oder die Formatierung bescheiden ist oder sonst was, bitte habt Gnade.. 🙂

Ich habe eine Aufgabe zu erledigen und komme momentan leider nicht weiter. Wir sollen ein Programm schreiben, indem ein Client über die Run Arguments (wir programmieren mit Eclipse) eine Rechenaufgabe der Art MUL 2 5 an den Server übergibt, dieser sie dann ausrechnet, in der Konsole ausgibt, in eine Datei speichert und dann das Ergebnis an den Client zurückgibt. Erstmal keine Sorge, ich will natürlich nicht ne komplette Lösung haben, habe schon Ideen, aber hänge gerade an einer Kleinigkeit, bei der ich nicht weiterkomme und vorher auch nicht weitermachen kann.

Mein Problem ist das übergeben der Run args an den Server. Wir hatten ein Testprogramm geschrieben, dass auch wunderbar funktioniert, in dem einfach nur ein String übergeben wird:

Client Code:

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class HojaClientSocket {
    public static void main(String[] input){
      
        try {
            Socket s=new Socket("127.0.0.1", 4711);
          
                OutputStream os=s.getOutputStream();    //senden an Server
                PrintWriter pw=new PrintWriter(os);
                pw.println("TEST");  
                pw.flush();                                                  //anstatt von pw.close();
                InputStream is=s.getInputStream();          //zurückgegebener String von Server einlesen
                InputStreamReader isr=new InputStreamReader(is);
                BufferedReader br=new BufferedReader(isr);
                String antwortVomServer=br.readLine();
                System.out.println("Antwort war: "+antwortVomServer);
                pw.close(); //Socket schließen
                s.close();  //Socket schließen
            //}
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Server Code:

Java:
package MessPack;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class HojaServerSocket {

    public static void main(String[] input) {
      
        try {
            ServerSocket so=new ServerSocket(4711);
            Socket s=so.accept(); //Server wartet auf Clientverbindungsanfrage, bzw. akzeptiert sie.
            InputStream is=s.getInputStream(); //String von Client bekommen
            InputStreamReader isr=new InputStreamReader(is);
            BufferedReader br=new BufferedReader(isr);
     
            String tmp=br.readLine();
            String erg=tmp.toLowerCase();
            OutputStream os=s.getOutputStream(); //String senden an Client
            PrintWriter pw=new PrintWriter(os);
            pw.println(erg);
            pw.close();
            s.close();
          
            System.out.println("Eingabe des Clients war: "+tmp);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Ausgabe auf Serverseite ist: Eingabe des Clients war: TEST
Ausgabe auf Clientseite ist: Antwort war: test

Nun möchte, bzw. darf ich aber eben nicht den String "TEST" übergeben, sondern Konsolenparamter (Run args), wie MUL 1 2 und nun kommt mein Problem:

Folgendes habe ich bislang ausprobiert (bzw. eigentlich schon ziemlich viel und auch ziemlich viel gegoogelt, sowie hier die Forensuche benutzt, aber ich finde einfach nichts :/ ):

Client:

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class HojaClientSocket {
    public static void main(String[] input){
      
        try {
            Socket s=new Socket("127.0.0.1", 4711);
          
                OutputStream os=s.getOutputStream();    //senden an Server
                PrintWriter pw=new PrintWriter(os);
                for(int i=0; i<input.length; i++){
                    pw.println(input[i]);
                    }
                pw.flush();                             //anstatt von pw.close();
                InputStream is=s.getInputStream();      //zurückgegebener String von Server einlesen
                InputStreamReader isr=new InputStreamReader(is);
                BufferedReader br=new BufferedReader(isr);
                String antwortVomServer=br.readLine();
                System.out.println("Antwort war: "+antwortVomServer);
                pw.close(); //Socket schließen
                s.close();  //Socket schließen
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Server:

Java:
package MessPack;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class HojaServerSocket {

    public static void main(String[] input) {
      
        try {
            ServerSocket so=new ServerSocket(4711);
            Socket s=so.accept(); //Server wartet auf Clientverbindungsanfrage, bzw. akzeptiert sie.
            InputStream is=s.getInputStream(); //String von Client bekommen
            InputStreamReader isr=new InputStreamReader(is);
            BufferedReader br=new BufferedReader(isr);
     
            String tmp=br.readLine();
            OutputStream os=s.getOutputStream(); //String senden an Client
            PrintWriter pw=new PrintWriter(os);
            pw.println(tmp);
            pw.close();
            s.close();
          
            System.out.println("Eingabe des Clients war: "+tmp); 
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

So bekomme ich nun immerhin schon mal die Ausgabe: Eingabe war MUL, bzw Antwort war MUL. Aber der Rest dahinter kommt nicht an. Lasse ich clientseitig die for schleife weg und versuche mir mit pw.println(input) die Run args ausgeben zu lassen, so wie ich es bis jetzt kennengelernt habe, bekomme ich folgende Ausgabe: Eingabe des Clients war/Antwort war: [Ljava.lang.String;@119db21f.

Hat jemand ne Idee, wie ich den run Arg Array sauber zum Server und wieder zurück bekomme?

Vielen Dank im Voraus und viele Grüße
 
Zuletzt bearbeitet von einem Moderator:
Also nur falls es jemand interessiert, ich habe es selbst gelöst, ob schön, oder nicht, sei dahin gestellt, aber es funktioniert, wie gewollt und zwar folgendermaßen:

Client:

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class ClientSocket {
 
    public static void main(String[] input){
   
     try {
         Socket s=new Socket("127.0.0.1", 4711);
       
            OutputStream os=s.getOutputStream(); //senden an Server
            PrintWriter pw=new PrintWriter(os);
    
            if(input.length<=5){
                 pw.println(input[0] + " " + input[1] + " " + input[2] + " " + input[3] + " " + input[4]);
            }else{
                 pw.println(input[0] + " " + input[1] + " " + input[2] + " " + input[3] + " " + input[4] + " " + input[5]);
            }
              
            pw.flush();                             //anstatt von pw.close();
            InputStream is=s.getInputStream();      //zurückgegebener String von Server einlesen
            InputStreamReader isr=new InputStreamReader(is);
            BufferedReader br=new BufferedReader(isr);
            String antwortVomServer=br.readLine();
            System.out.println(antwortVomServer); //zurückgegebenen String ausgeben
            pw.close(); //Socket schließen
            s.close();  //Socket schließen
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Server:

Java:
package MessPack;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TestServerSocket {
  
    public static void main(String[] input) {
      
        try {
            ServerSocket so=new ServerSocket(4711);
            Socket s=so.accept(); //Server wartet auf Clientverbindungsanfrage, bzw. akzeptiert sie.
            InputStream is=s.getInputStream(); //String von Client bekommen
            InputStreamReader isr=new InputStreamReader(is);
            BufferedReader br=new BufferedReader(isr);
            String tmp=br.readLine(); //String von Client in tmp speichern
            OutputStream os=s.getOutputStream(); //String senden an Client
            PrintWriter pw=new PrintWriter(os);
              
            String[] aufteilen=tmp.split(" "); //String tmp nach Leerzeichen trennen

            if(aufteilen[2].equals("MUL")){
                if(aufteilen.length<=5){               
                  
                    int ersteZahl=Integer.parseInt(aufteilen[3]);
                    int zweiteZahl=Integer.parseInt(aufteilen[4]);
                    int Ergebnis=ersteZahl*zweiteZahl;
                    String Auf=aufteilen[0] +" "+ aufteilen[1]+" "+ aufteilen[2] +" "+ ersteZahl + "*" + zweiteZahl;
                    System.out.println(Auf);
                    String Erg="Ergebnis: "+ Ergebnis;
                    pw.println(Erg); //zurück an Client
                    String Dat=Auf + "\n" + Erg;
                    TestServerSocket ds=new TestServerSocket();
                    ds.SchreibeInDatei("/home/user/Schreibtisch/Rechnen.txt", Dat);
                    
                }
                if(aufteilen.length==6){

                    int ersteZahl=Integer.parseInt(aufteilen[3]);
                    int zweiteZahl=Integer.parseInt(aufteilen[4]);
                    int dritteZahl=Integer.parseInt(aufteilen[5]);
                    int Ergebnis=ersteZahl*zweiteZahl*dritteZahl;
                    String Auf=aufteilen[0] +" "+ aufteilen[1]+" "+ aufteilen[2] +" "+ ersteZahl + "*" + zweiteZahl + "*" + dritteZahl;
                    System.out.println(Auf);
                    String Erg="Ergebnis: "+ Ergebnis;
                    pw.println(Erg);
                    String Dat=Auf + "\n" + Erg;
                    TestServerSocket ds=new TestServerSocket();
                    ds.SchreibeInDatei("/home/user/Schreibtisch/Rechnen.txt", Dat);
                }
             }

               if(aufteilen[2].equals("ADD")){
                if(aufteilen.length<=5){  
               
                    int ersteZahl=Integer.parseInt(aufteilen[3]);
                    int zweiteZahl=Integer.parseInt(aufteilen[4]);
                    int Ergebnis=ersteZahl+zweiteZahl;
                    String Auf=aufteilen[0] +" "+ aufteilen[1]+" "+ aufteilen[2] +" "+ ersteZahl + "+" + zweiteZahl;
                    System.out.println(Auf);
                    String Erg="Ergebnis: "+ Ergebnis;
                    pw.println(Erg);
                    String Dat=Auf + "\n" + Erg;
                    TestServerSocket ds=new TestServerSocket();
                    ds.SchreibeInDatei("/home/user/Schreibtisch/Rechnen.txt", Dat);
               
                }
                if(aufteilen.length==6){
               
                    int ersteZahl=Integer.parseInt(aufteilen[3]);
                    int zweiteZahl=Integer.parseInt(aufteilen[4]);
                    int dritteZahl=Integer.parseInt(aufteilen[5]);
                    int Ergebnis=ersteZahl+zweiteZahl+dritteZahl;
                    String Auf=aufteilen[0] +" "+ aufteilen[1]+" "+ aufteilen[2] +" "+ ersteZahl + "+" + zweiteZahl + "+" + dritteZahl;
                    System.out.println(Auf);
                    String Erg="Ergebnis: "+ Ergebnis;
                    pw.println(Erg);
                    String Dat=Auf + "\n" + Erg;
                    TestServerSocket ds=new TestServerSocket();
                    ds.SchreibeInDatei("/home/user/Schreibtisch/Rechnen.txt", Dat);
                }
             }
             
               if(aufteilen[2].equals("DIV")){
                if(aufteilen.length<=5){
                  
                    int ersteZahl=Integer.parseInt(aufteilen[3]);
                    int zweiteZahl=Integer.parseInt(aufteilen[4]);
                    int Ergebnis=ersteZahl/zweiteZahl;
                    String Auf=aufteilen[0] +" "+ aufteilen[1]+" "+ aufteilen[2] +" "+ ersteZahl + "/" + zweiteZahl;
                    System.out.println(Auf);
                    String Erg="Ergebnis: "+ Ergebnis;
                    pw.println(Erg);
                    String Dat=Auf + "\n" + Erg;
                    TestServerSocket ds=new TestServerSocket();
                    ds.SchreibeInDatei("/home/user/Schreibtisch/Rechnen.txt", Dat);
                  
                }
                if(aufteilen.length==6){
                  
                    int ersteZahl=Integer.parseInt(aufteilen[3]);
                    int zweiteZahl=Integer.parseInt(aufteilen[4]);
                    int dritteZahl=Integer.parseInt(aufteilen[5]);
                    int Ergebnis = ersteZahl/zweiteZahl/dritteZahl;
                    String Auf=aufteilen[0] +" "+ aufteilen[1]+" "+ aufteilen[2] +" "+ ersteZahl + "/" + zweiteZahl + "/" + dritteZahl;
                    System.out.println(Auf);
                    String Erg="Ergebnis: "+ Ergebnis;
                    pw.println(Erg);
                    String Dat=Auf + "\n" + Erg;
                    TestServerSocket ds=new TestServerSocket();
                    ds.SchreibeInDatei("/home/user/Schreibtisch/Rechnen.txt", Dat);
                }
             }

               pw.close(); //Socket schließen
               s.close();  //Socket schließen
      
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            }
        }   
     
        public void SchreibeInDatei(String pfad, String inhalt){
      
            File datei = new File(pfad);
            try {
                FileWriter fr = new FileWriter(datei, true);
                fr.write(inhalt+"\n");
                fr.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
  
    }
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben