tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
689
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    yuro yuro ist offline Mitglied Silber
    Registriert seit
    Jan 2010
    Beiträge
    89
    Servus

    Hab hier eine Aufgabe wo ich ned weiterkomm.

    Und zwar lautet sie:

    Folgende Socket-Anwendung (Client+Server) soll das können:

    - Server-Prog. läuft nach dem Start kontinuierlich,d.h. kann mehrere Aufgaben nacheinander behandeln.
    - Vom Client aus können Sie den Befehl „Sende <Dateiname> <Dateiinhalt>“ abschicken.
    - Der Client sucht in seinem lokalen Verzeichnis und liefert den Inhalt der Datei –falls vorhanden - an den Server.
    - Der Server empfängt den <Dateiinhalt> und speichert den Inhalt unter <Dateiname> in seinem lokalen Verzeichnis
    - Vom Client aus können Sie den Befehl „Hole <Dateiname>“ abschicken. Der Server sucht in seinem lokalen Verzeichnis und liefert den Inhalt der Datei –falls vorhanden - an den Client zurück
    - Der Inhalt der Datei wird auf der Konsole des Clients ausgegeben
    - Vom Client aus können Sie den Befehl „Schliesse“ absetzen. Dieser Befehl bewirkt serverseitig, dass sich das Server-Programm beendet.

    Folgende Programme existieren:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    [B]EchoClient.java[/B]
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;
     
     
    public class EchoClient {
     
        public static void main (String []args) throws UnknownHostException, IOException
        {
            // verbinde mit dem rechner unter der ip adresse
            // 127.0.0.1 auf dem port 1565
            Socket socket=new Socket("127.0.0.1",1565);
            // erzeuge kommunikationsendpunkt um daten zu schicken
            PrintWriter printW=new PrintWriter(socket.getOutputStream());
            printW.println("Hallo in Kleiner Schrift\n\r");
            printW.flush();
            //erzeuge kommunikationsendpunkt um daten zu lesen
            BufferedReader bufRead=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            System.out.println("Ausgabe vom Server war"+bufRead.readLine());
        }
        
    }

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
    EchoSocketServer.java
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
     
     
    public class EchoSocketServer {
     
        public static void main(String[] args) throws IOException {
            // Der dienst wird auf dem port 1565 gestartet
            ServerSocket server=new ServerSocket(1565);
            // warte solange bis ein client eine verbindung herstellt 
            Socket socket=server.accept();
            //erzeuge kommunkationsendpunkt um daten zulesen
            BufferedReader bufRead=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //eingehende zeile wird eingelesne
            String input=bufRead.readLine();
            //...und auf der kommandozeile ausgegeben
            System.out.println(input);
            //string wird in klein-buchstaben umgewandelt
            input=input.toLowerCase();
            // kommunkationsendpunkt zum schreiben von daten an den client wird erstellt
            PrintWriter printW=new PrintWriter(socket.getOutputStream());
            //daten werden an den client geschickt
            printW.println(input);
            printW.flush();
     
        }
     
    }

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    
    ReadFromFile.java
     
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;
     
     
    public class ReadFromFile {
     
       
        public static void main(String[] args) {
            ReadFromFile rff=new ReadFromFile();
            rff.readFile();
            
        }
        
        public void readFile()
        {
            // es wir das die Klasse File benutzt um eine Datei input.txt zu referenzieren.
            File file = new File (&quot;input.txt&quot;);
            // Die Klasse Scanner em&ouml;glich es uns einfach mit einem File Objekt zu arbeiten und dessen Inhalt einzulesen
            Scanner scanner = null;
            try {
                // hier verbinde ich die Objekte der Klasse Scanner und File
               scanner = new Scanner (file);
            } catch (FileNotFoundException e) {
              System.out.println (&quot;File not found!&quot;);
             
              System.exit (0);
            }
       
            // solange die methode hasNext im Scanner weitere Zeilen feststellt
            while(scanner.hasNext())
            {
                // es wird eine zeile ausgelesen aus der datei und in der variable tmp gespeichert
                String tmp=scanner.nextLine();
                // die gerade eingelesene Zeile wird auf der Kommandozeile ausgegeben
                System.out.println(tmp);
            }
            
        }
     
    }

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    
    ReadFromConsole.java
     
    import java.util.Scanner;
     
     
    public class ReadFromConsole {
     
        public static void main(String[] args) {
     
            ReadFromConsole rfc = new ReadFromConsole();
            rfc.readIn();
        }
     
        public void readIn() {
            System.out.println(&quot;Wir m&ouml;chten die Werte von Personen ueber die Konsole einlesen.&quot;);
     
            Scanner scanner = new Scanner(System.in);
            while (true) {
              
                String tmpName = &quot;&quot;;
                String tmpVorname = &quot;&quot;;
                String tmpWeiter = &quot;&quot;;
                System.out.println(&quot;Bitte geben Sie zuerst den Namen ein:&quot;);
                tmpName = scanner.next();
                System.out.println(&quot;Bitte geben Sie danach den Vornamen ein:&quot;);
                tmpVorname = scanner.next();
                System.out.println(&quot;Die Daten der eingegebenen Person:&quot;+tmpName+&quot; &quot;+tmpVorname);
                System.out
                        .println(&quot;Moechten Sie fortfahren mit der Eingabe (ja/nein):&quot;);
                tmpWeiter = scanner.next();
                if (tmpWeiter.equals(&quot;nein&quot;)) {
                    System.out.println(&quot;Programm wird beendet&quot;);
                    System.exit(1);
                    return;
                }
     
            }
     
        }
    }
     

  2. #2
    Avatar von Bratkartoffel
    Bratkartoffel Bratkartoffel ist offline gebratene Kartoffel
    tutorials.de Premium-User
    Registriert seit
    Jun 2007
    Ort
    Passau (Niederbayern)
    Beiträge
    1.394
    Hi,

    wo kommst du jetzt nicht weiter, bzw. was ist dein genaues Problem?

    Gruß
    BK
     
    Über eine gute Bewertung freut sich jeder ;)
    Bitte erledigte Threads als "Erledigt" markieren.

    "Though a program be but three lines long, someday it will have to be maintained.''
    -- Geoffrey James, "The Tao of Programming"

  3. #3
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.503
    ...screcno ciao,

    Die gezeigten Programme sind also zurzeit unabhängig von der Aufgabe; um zu zeigen, wie die Sachen funktionieren?

    Und was HTML-mäßiges ist deinen Quelltexten eigentlich passiert? &quot;?
    (Liegt nicht an den Codetags, die funktionieren).

    edit: 5 Minuten? Hmmm...
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  4. #4
    yuro yuro ist offline Mitglied Silber
    Registriert seit
    Jan 2010
    Beiträge
    89
    servus,

    also das sind beispiele mit denen wir arbeiten sollen.. bzw. verknüpfen plus die fehlenden funktionen mitprogrammieren! ich weiss nicht wie ich anfangen soll

    edit: sorry die html codes kamen durch den texteditor! sorrrry
     

  5. #5
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.503
    Also,

    Client:
    Zuerst mal ein Programm, das in einer Schleife immer wieder Zeile von der Konsole einliest.

    Wenn der Stringanfang Sende ist, nimmst du den Rest des Strings als Dateinamen.
    Öffne einen Socket und die Datei zum Namen.
    Schick die Zeichenanzahl des Namens über den Socket.
    Schick den Namen als Einbytezeichensatz (Iso8859-1 zB.) über den Socket.
    Shcick, wieviel Byte die Datei hat.
    Lies die Datei ein und schick sie auch über den Socket.
    Schließe Datei und Socket.

    Wenn der Stringanfang aber Hole war:
    Socket öffnen.
    Länge vom Dateinamen und Name senden.
    Zahl empfangen, die eine Byteanzahl angibt.
    So viel Byte empfangen und in eine neue Datei schreiben.
    Socket und Datei schließen.
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  6. #6
    yuro yuro ist offline Mitglied Silber
    Registriert seit
    Jan 2010
    Beiträge
    89
    Muss ich nicht dem Server eine while-Schleife hinzufügen****?

    "Wenn der Stringanfang Sende ist, nimmst du den Rest des Strings als Dateinamen."

    wie sieht sowas denn aus****
     

  7. #7
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.503
    Warum machst du nicht zuerst mal den Client, statt Server?

    Zum String:
    Die Stringklasse hat alle Methoden, die du dafür brauchst..
    warum schaust du nicht einfach einmal nach?
    Mit indexOf suchst du das erste Leerzeichen (oder den ersten Tabulator).
    Mit substring bekommst dan einereits den Teil vor der gefundenen Stelle
    (zum Prüfen auf "Sende" etc.), andererseits den anderen Stringteil (=Dateiname).

    Und bitte schick nicht dauernd PNs.
    Ich seh deine neuen Beiträge auch so.
    Bin eben auch nicht immer online,,,
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  8. #8
    Avatar von schnuffie
    schnuffie schnuffie ist offline Mitglied Platin
    Registriert seit
    Oct 2004
    Ort
    Ober-Roden (Hessen)
    Beiträge
    725
    Als Freund von Strukturierung würde ich erstmal damit anfangen, eine definierte Schnittstelle zu bilden, da auf Client- und Server-Seite jeweils Dateien gelesen bzw. geschrieben werden sollen. Auch wäre es sinnvoll, die Operationen als enum zu definieren. Nebenbei ist auf beiden Seiten jeweils vom Stream zu lesen und in den Stream zu schreiben. Deployen würde ich dann einen "Shared"-Teil (= die gemeinsam verwendeten Dateien) auf Client und Server und dann je nachdem den Client- und den Server-Teil.

    Danach ist es jetzt relativ easy, die einzelnen Teile nacheinander zu implementieren und die Implementierungen erstmal ohne die Sockets zu testen, das macht das Ganze einfacher.
     
    CU schnuffie

    Fragliche Fragen stellende Fragensteller sind für verantwortungslose Antworten antwortender verantwortlicher Antworter selbst verantwortlich.

Ähnliche Themen

  1. socket client- server windows<->linux
    Von hphi im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 22.11.07, 13:53
  2. Server Socket und Client Socket
    Von spiderman21 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 2
    Letzter Beitrag: 23.10.07, 17:00
  3. Server Socket und Client Socket
    Von spiderman21 im Forum Netzwerke
    Antworten: 1
    Letzter Beitrag: 22.10.07, 01:48
  4. Socket Server / Client problem
    Von PrinzMartin im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 6
    Letzter Beitrag: 23.08.07, 16:53
  5. Debian Pakete für Java Client Prog
    Von Mindwinder im Forum Java
    Antworten: 0
    Letzter Beitrag: 19.11.06, 16:20