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:

derda

Neues Mitglied
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:
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
B Axis2 Webservice mit Client Zertifikat Authentifizierung Netzwerkprogrammierung 3
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
T Jetty mit Client-Zertifikat nur bei spezifischer URL Netzwerkprogrammierung 1
J Einlesen von Servernachrichten von TCP-Client Netzwerkprogrammierung 17
J Client-Server und SOAP Netzwerkprogrammierung 23
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
T Client zu Client Kommunikation Netzwerkprogrammierung 2
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
ruutaiokwu ständig "sender address rejected: improper use of smtp" bei smtp-client Netzwerkprogrammierung 4
J HTTP [Java 9] Neuer HTTP Client - Tutorial Netzwerkprogrammierung 3
A Chatserver/-client - Code stoppt bei readUTF() Netzwerkprogrammierung 7
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
L Zugriffprobleme Client - Webservice AspenTechnology Netzwerkprogrammierung 0
A Client Client Übertragung Netzwerkprogrammierung 12
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
K Socket Netty Client wirft Fehler! Netzwerkprogrammierung 3
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
U Client Soap Verbindung wieder schließen Netzwerkprogrammierung 0
U Socket Client mit hash authentifizieren Netzwerkprogrammierung 3
F HTTP HTTP Rest Client mit TLS1.2 und selbst signiertem Zertifikat Netzwerkprogrammierung 2
P Server als Client nutzen Netzwerkprogrammierung 8
Cromewell Socket Multithreaded Server und Client Netzwerkprogrammierung 1
Y Client/Server/DB communication Netzwerkprogrammierung 3
JavaWolf165 Socket mit .writeUtf etwas vom Client zum Server schicken Netzwerkprogrammierung 13
J Client - Serversocket Netzwerkprogrammierung 1
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
gamebreiti Socket Server / Client Anwendung Manipulation von Objekten durch Server Netzwerkprogrammierung 9
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
N Fragen zu Sockets Client Netzwerkprogrammierung 3
F Extasys TCp Client extends Funktion Netzwerkprogrammierung 0
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
O Client zwischen XML und JSON auswählen lassen Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
A Socket Wie ein einfacher Multithreads Service mit Telnet als Client mit Observable/Observer gelöst.... Netzwerkprogrammierung 0
K C# Server - Android Client Netzwerkprogrammierung 0
T Application Client NullPointerExc Netzwerkprogrammierung 7
V TCP Client funktioniert auf Emulator aber nicht auf Smartphone Netzwerkprogrammierung 5
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
H HTTP REST Jersey - PUT-Beispiel von Client senden Netzwerkprogrammierung 0
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
P HTTP Server / Client Netzwerkprogrammierung 1
N FTP FTP Client invalid IPv6 address (Apache Commons Net API) Netzwerkprogrammierung 6
F TCP Client, verbindung aufrecht halten Netzwerkprogrammierung 0
X RMI: Woher kennt der Client das Schnittstellen-Interface? Netzwerkprogrammierung 2
E Thematik Client server Netzwerkprogrammierung 2
D UDP Client empfängt nichts Netzwerkprogrammierung 2
D Client/Server per Crossover Lan Kabel Netzwerkprogrammierung 1
S Client Server Connection Netzwerkprogrammierung 4
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
S Client Anwendung mit zentraler SQL-Datenbank Netzwerkprogrammierung 3
N Client Identifikation eines Servers Netzwerkprogrammierung 1
S Sichere Server/Client Architektur Netzwerkprogrammierung 1
D Chat Server/mehre Client Netzwerkprogrammierung 9
I Server+Client Netzwerkprogrammierung 3
N Client am Server abmelden Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
D SSH Client Netzwerkprogrammierung 7
U Socket Instant Messanger (Server Linux, Client Windows) Netzwerkprogrammierung 1
B TCP Client Android Netzwerkprogrammierung 3
Athena Grundsatzfragen zu Client-Server-Architektur / Matchmaking Netzwerkprogrammierung 1
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
F Client Server DB Netzwerkprogrammierung 0
A Verständnisfrage Multi-Threaded Client/Server Netzwerkprogrammierung 5
F Tipps zum Thema Server/Client vie SOAP Netzwerkprogrammierung 0
OnDemand Ist Client noch angemeldet? Netzwerkprogrammierung 7
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
D Socket UDP Client reagiert nicht auf spontane Meldungen Netzwerkprogrammierung 5
R Zeitliche Syncronisation Server - Client Netzwerkprogrammierung 0
S Server-Client: Image senden Netzwerkprogrammierung 2
C Multithreading Client / Server erklärt Netzwerkprogrammierung 11
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
S Socket (client) verbindet nicht Netzwerkprogrammierung 6
V Templates für Java Client rabbitmq Netzwerkprogrammierung 4
J Client Server - Serialisierung Netzwerkprogrammierung 8
C Client connection per Portforwarding auf einen lokalen Serverport Netzwerkprogrammierung 3
Luk10 Server / Client: Clients speichern! Netzwerkprogrammierung 6
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben