Netzwerkprogrammierung Anfang

Toaster-X

Mitglied
Hallo, ich bin nun im letzten Schuljahr an einem Gymnasium und eines unserer letzten Themen in den Programmieranfängen ( bevor es zu Androidprogrammierung geht) ist nun die Netzwerkprogrammierung.
Letztes Jahr habe ich noch alles gut verstanden ( bestätigte sich durch 14 Punkte im Zeugnis ), doch nun haben wir einige Aufgaben bekommen, die wir lösen sollen, allerdings bin ich damit überfordert, da wir uns das meiste selbst erarbeiten sollten.
Für die erste Aufgabe hat uns der Lehrer bereits eine Lösung gegeben, wobei ich aus dem Quelltext nicht wirklich schlauer werde und somit auch in den Aufgaben nicht weiterkomme.

Die 1. Aufgabe war schlichtweg man solle im Clientprogramm eine Zahl eingeben und im Serverprogramm überprüfen lassen ob es sich dabei um eine Primzahl handelt. Dafür gibt es auch Lösungen und ich wollte fragen, ob mir jemand den Quelltext erklären könnte, und mir die Zusammenhänge zw. Server und Clientprogramm erklären, damit ich die anderen Aufgaben bearbeiten kann.
(Bsplaufgaben die ich noch machen muss:
2.) Der Server soll auf Anfrage eine Primzahl generieren und an den Client schicken
4.) Egänze ein Programm so, dass alle Verbindungsinfos angrzeigt werden
5.) Echoserver
8.) Chatprogramm
)
Ich scheitere allerdings ja schon an der 2. Aufgabe da ich die Lösung von 1.) nicht verstanden habe.

Deshalb würde ich mich über eure Hilfe freuen! Danke im Vorraus :)

Bild 1 zeigt das Clientprogramm
Bild 2 den Anfang des Servers und wie die Zahl auf eine Primzahl untersucht wird
Bild 3 ist dann das Serverprogramm

Danke!
 

Anhänge

  • 15397054577913333140800670896799.jpg
    15397054577913333140800670896799.jpg
    2,4 MB · Aufrufe: 44
  • 15397055005581123389389661284633.jpg
    15397055005581123389389661284633.jpg
    2,8 MB · Aufrufe: 57
  • 15397055434023359789000369468231.jpg
    15397055434023359789000369468231.jpg
    2,4 MB · Aufrufe: 51

mrBrown

Super-Moderator
Mitarbeiter
Poste den Code doch als Code ([code=java]...der Code...[/code]) und nicht als Bild, das erleichtert allen die Hilfe deutliche ;)

(und der Code kommt wirklich von jemandem, der Programmieren beibringen soll?)
 

mihe7

Top Contributor
Was verstehst Du denn nicht?

Übrigens: du kannst hier auch Quellcode einstellen, wenn Du ihn in [code=Java]...[/code] einschließt.
 

Toaster-X

Mitglied
Okay, ich hoffe dass es klappt, danke nochmals :)
Java:
import java.net.*;
import java.io.*;
public class Primzahl1Client {
  public static void main(String[] args) throws IOException {
    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Bitte geben Sie die gewünschte Zahl ein: ");
    int zahl = Integer.parseInt(stdin.readLine());
    System.out.println("Die Zahl wird nun an den Server übermittelt und geprüft.");
    
    String host = "localhost";
    int port = 33333;
    try {
      Socket sock = new Socket(host, port);
      OutputStreamWriter out = new OutputStreamWriter(sock.getOutputStream());
      out.write(zahl +"\r\n");
      out.flush(); 
     
      InputStream antwort = sock.getInputStream();
      BufferedReader sin = new BufferedReader(new InputStreamReader(antwort));
      String aw = sin.readLine();
      System.out.println(aw);
      sock.close();
    } catch (UnknownHostException uhe) {
      System.err.println(uhe);
    } catch (IOException ioe) {
      // kein Server, dann IOException
    }
  }  // end main 
}  // end
Das Clientprogramm
Java:
import java.net.*;
import java.io.*;
import java.util.*;
public class Primzahl1Server {
  /**
  * Methode um Primzahlen zu testen.
  * @param eingabewert: Zahl die auf Primzahl getestet werden soll
  * @return true (ist Primzahl); false (ist keine Primzahl)
  */
  
  public static boolean isPrimzahl(int eingabewert){
    int ergebnis;
    boolean isPrimzahl = true;
    int i=eingabewert;
    for (int j= eingabewert; j>1; j--){
      i= i-1;
      ergebnis = eingabewert % i;
      if ((ergebnis==0)&&(i!=1)) {
        isPrimzahl = false;
      }
    }
    return isPrimzahl;
  }
  
  public static void main(String[] args) throws IOException {
    String host = "localhost";
    int port = 33333;
    ServerSocket server = new ServerSocket(port);
    Socket connection = null;
    
    while (true) {
      System.out.println("Warte auf Verbindungen.");
      connection = server.accept();
      InputStream anfrage = connection.getInputStream();
      BufferedReader sin = new BufferedReader(new InputStreamReader(anfrage));
      int zahl = Integer.parseInt(sin.readLine());
      System.out.println("Die Zahl " + zahl + " wurde vom Client " + connection.getInetAddress() + " port " + connection.getPort() + " empfangen und wird nun geprüft");
      boolean ergebnis = isPrimzahl(zahl);
      OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
      if (ergebnis == true) {
        System.out.println("Die Zahl " + zahl + " ist eine Primzahl. \r\n");
        out.write("Die Zahl " + zahl + " ist eine Primzahl. \r\n");
      } // end of if
      else{
        System.out.println("Die Zahl " + zahl + " ist keine Primzahl. \r\n");
        out.write("Die Zahl " + zahl + " ist keine Primzahl. \r\n");
      }
      out.flush();
      System.out.println("Ergebnis wurde übermittelt - Verbindung wird getrennt. \r\n");      
      connection.close();
    }
  }  // end main 
}  // end
 

Tarrew

Top Contributor
Wie mihe schon sagte: Was sind denn konkret deine Fragen?

Die print-Ausgaben des Programms beschreiben ja mehr oder weniger fast jede Zeile ;)
 

Toaster-X

Mitglied
Um es aber nochmals zu konkretisieren:
Das Clientprogramm erscheint mir soweit logisch, allerdings habe ich beim Serverprogramm Probleme:

Das InputStream anfrage bedeutet, vermute ich mal, dass das eingetippte im Client empfangen wird und ausgewertet werden kann.

Die nächste Zeile widerrum verstehe ich nicht, da ich nicht verstehe wieso man einen neuen BufferedReader (nicht stdin) braucht und wofür er gut ist und damit in Verbindung verstehe ichauch die darauffolgende Zeile nicht.
Das boolean ergebnis ist denke ich die Überprüfung ob das Eegebnis eine Primzahl ist?

out.write bedeutet denke ich dass diese Zeile im Client ausgegeben werden soll und out.flush sendet es ab und zum Schluss wirddie Verbindung wieder geschlossen.

Aber wo wurde jetzt die Zahl die vom Client kommt überprüft? Weil ich den Primzahltest nicht ganz verstehe ( Hatte der Lehrer uns als Hilfestellung gegeben damkt wir das nicht selbst machen müssen.

Hoffe das nun klarer ist wobei ich Hilfe brauche
 

Tarrew

Top Contributor
Der Inputstream, der aus der connection gezogen wird, enthält die Daten, die vom Client kommen. Aus dem Inputstream möchtest du die Zahl auslesen, die der Client gesendet hat.
Jetzt bietet ein InputStream selbst aber keine einfache Methode an, um etwa eine ganze Zeile zu lesen.
https://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html

Über den InputStream kannst du nur einzelne bzw. eine bestimmte Anzahl von Bytes lesen.

Um das komfortabler zu gestalten, wird der InputStream "eingepackt".
Zuerst wird der InputStreamReader erstellt, der die gelesenen Bytes aus dem InputStream automatisch in entsprechende chars umwandelt.
Der InputStreamReader wird wiederum in einen BufferedReader gesteckt, der sich um das Buffering kümmert, wie der Name vermuten lässt. Damit lässt sich dann auch leicht eine ganze Zeile auslesen, anstatt nur einzelne Bytes.

Java:
int zahl = Integer.parseInt(sin.readLine());
sin.ReadLine() liest die Zeile aus, die Zahl aus dem InputStream, die der Client geschickt hat. Das Ergebnis wird dann direkt zu einem Integer geparst.

Java:
boolean ergebnis = isPrimzahl(zahl);
"zahl" ist ja die Zahl, die eben vom Client ausgelesen wurde. Die wird dann entsprechend überprüft.
 

Toaster-X

Mitglied
Vielen Dank dir! Ich hab es jetzt endlich verstanden und auch direkt beim ersten Versuch die 2. Aufgabe geschafft, an der ich bereits 2 Stunden erfolglos arbeitete!

Vielen Vielen Dank einfach! :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Warum wird mir nichts angezeigt? Netzwerkprogrammierung Java Basics - Anfänger-Themen 1
T NetzwerkProgrammierung Java Basics - Anfänger-Themen 4
M Netzwerkprogrammierung => Is connection alive? Java Basics - Anfänger-Themen 6
J Netzwerkprogrammierung Client/Server Java Basics - Anfänger-Themen 16
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
K Wie kann ich ein Element an den Anfang setzten ? Java Basics - Anfänger-Themen 1
berserkerdq2 Warum macht man in IJVM am Anfang Bipush 0? Java Basics - Anfänger-Themen 1
M Java Anfang Java Basics - Anfänger-Themen 13
L Anfang von Programmtext Java Basics - Anfänger-Themen 11
J am Anfang eines String ein Leerzeichen löschen Java Basics - Anfänger-Themen 6
N Anfang eine Array Schleife finden Java Basics - Anfänger-Themen 18
F Interface JTextField am Anfang unsichtbar o_o Java Basics - Anfänger-Themen 3
H Tetris anfang Java Basics - Anfänger-Themen 6
V Bin eigentlich noch VOR dem Anfang .... Java Basics - Anfänger-Themen 9
X Best Practice SUCHE ein gutes Javabuch! (kein Anfang von 0) Java Basics - Anfänger-Themen 5
D ListIterator auf Anfang zurücksetzen Java Basics - Anfänger-Themen 2
S Video2Brain Java7 gut fürn Anfang? Java Basics - Anfänger-Themen 8
M Komplett anfang in Java Java Basics - Anfänger-Themen 9
O Erste Schritte Aller Anfang ist schwer ! Bitte um Unterstützung Java Basics - Anfänger-Themen 6
M Aller anfang ist schwer :D Hilfe! Java Basics - Anfänger-Themen 18
S Erste Schritte Von Anfang an ! Java Basics - Anfänger-Themen 6
J Variablen Letzte berechnete variable am anfang Ausgeben ? Java Basics - Anfänger-Themen 4
B Anfang des Damenproblems Java Basics - Anfänger-Themen 82
H Problem beim Anfang von Java (Java Editor) Java Basics - Anfänger-Themen 2
E Listen vereinen, wenn Elemente am Anfang/Ende übereinstimmen Java Basics - Anfänger-Themen 2
J Bufferedreader nich von anfang an. Java Basics - Anfänger-Themen 14
Z TableCellRenderer anfang so richtig? Java Basics - Anfänger-Themen 13
M JTextPane an den Anfang springen Java Basics - Anfänger-Themen 8
Povlsen84 String - Zeichen am Anfang entfernen Java Basics - Anfänger-Themen 11
P Ein Programm vorzeitig beenden und wieder an den Anfang springen. Java Basics - Anfänger-Themen 7
K Befehl um am Anfang einer Methode zu kommen? Java Basics - Anfänger-Themen 9
A Filereader - An den Anfang des File springen Java Basics - Anfänger-Themen 2
G Einfacher Anfang mit Hibernate Java Basics - Anfänger-Themen 4
P Buffered Reader an Anfang setzen Java Basics - Anfänger-Themen 4
A Aus switch case an den Anfang? Java Basics - Anfänger-Themen 7
B so ziemlich am anfang Java Basics - Anfänger-Themen 11
G datei -> zeile am anfang einfügen/löschen Java Basics - Anfänger-Themen 4
K Ganz am Anfang - Java + Datenbank Java Basics - Anfänger-Themen 6
G Aller anfang is schwer. Java Basics - Anfänger-Themen 4
C Java-Anfang main void public? Java Basics - Anfänger-Themen 5
T Grundlagen ganz am Anfang Java Basics - Anfänger-Themen 12
R An den Anfang einer While-Schleife springen Java Basics - Anfänger-Themen 2
D wieso ist die combobox nicht von anfang an aktiviert? Java Basics - Anfänger-Themen 4
A Iterator auf anfang setzen Java Basics - Anfänger-Themen 5
G in txt file text nicht am ende sondern am anfang anhängen! Java Basics - Anfänger-Themen 12
A ganz am Anfang Java Basics - Anfänger-Themen 15
K Zum Anfang einer ArrayList springen Java Basics - Anfänger-Themen 4
J TextArea auf Anfang setzen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben