Lottoserver: Eingabe wird nicht übertragen?

ChuiOG

Mitglied
Hallo,
ich habe folgendes Problem: Ich muss einen LottoServer und einen LottoClient erstellen. Der Client soll 6 Zahlen an den Server übermitteln und der Server soll diese mit den 6 gezogen Zahlen vergleichen und dann eine Antwort mit dem Ergebnis an den Client schicken.
Jedoch empfängt der Server erst gar nicht die 6 Zahlen. Er schreibt nichts weiter außer als "Warte auf Verbindungen...".


Client code:
Java:
import java.net.*;
import java.io.*;
public class LottoClientAG {
  public static void main(String[] args) throws IOException {
    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    int [] zahl;
    zahl = new int [6];
    int i = 0;
    String inData;
  
    System.out.println("=================================================");
    System.out.println("Willkommen beim LottoAG!");
    System.out.println("=================================================");
    System.out.println("Gewinne können nicht als echtes Geld ausgezahlt werden!");
    System.out.println();
    System.out.println("Achtung, Glücksspiel kann süchtig machen! Ab 18!");
    System.out.println();
    System.out.println("Spielprinzip: Lotto 6 aus 49. D.h. sie dürfen 6 verschiedene Zahlen wählen.");
    System.out.println();
  
    String host = "localhost";
    int port = 33333;
  
    try {
      Socket sock = new Socket(host, port);
      OutputStreamWriter out = new OutputStreamWriter(sock.getOutputStream());
      System.out.println("Sie sind nun mit dem LottoAG-Server verbunden. Die Spiel Regeln finden sie oben.");
      System.out.println("Sie dürfen nun ihre gewünschten Zahlen auswählen.");
    
      for (i = 0; i < 6 ; i++) {
        System.out.println("Geben sie ihre " + (i + 1) + "te Zahl ein:");
        System.out.println();
        inData = stdin.readLine();
        zahl[i] = Integer.parseInt(inData);
      
        if (zahl[i] < 1 || zahl[i] > 49) {
          System.out.println("Ungültige Eingabe! Bitte erneut tippen.");
          i--;
        } // end of if
        for (int n = 0; n < i ; n++ ) {
          if (zahl[i] == zahl[n]) {
            System.out.println("Diese Zahl hatten Sie bereits eingegeben! Bitte erneut tippen.");
            i--;
          } // end of if
        } // end of for
      
        out.write(zahl[i]+"/r/n");
        out.flush();
      
      }
     
      System.out.println("Die Zahlen werden nun dem Server übermittelt. Bitte gedulden sie sich, bis das Ergebnis berechnet wurde.");
      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 of try
  }
}

Server code:
Java:
import java.net.*;
import java.io.*;
import java.lang.Math.*;
class LottoServerAG
{
  public static void main (String[] args) throws IOException
  {
    int [] zahl;
    zahl = new int [6];
    int [] erg;
    erg = new int [6];
    int i = 0;
    int eingabe = 0;
    int counter = 0;      
  
  
    //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));  
  
    
for (i = 0; i < 6 ; i++) {
      zahl[i] = Integer.parseInt(sin.readLine());
      }

      System.out.println("Der Spieler hat folgende Zahlen gewählt:" + zahl[0] + "," + zahl[1] + "," + zahl[2] + "," + zahl[3] + "," + zahl[4] + "," + zahl[5]);
    
      /*for (i = 0; i < 6 ; i++) {
      zahl[i] = Integer.parseInt(sin.readLine());
      } */
    
      i = 0;
    
      for (i = 0; i < 6 ; i++) {
        erg[i] = (int)(Math.random() * 49) + 1;
        for (int n = 0; n < i ; n++ ) {
          if (erg[i] == erg[n]) {
            i--;
          } // end of if
        } // end of for
      }
    
      for (int j = 0; j < 6 ; j++ ) {
        for (int k = 0; k < 6 ; k++ ) {
          if (zahl[j] == erg[k]) {
            counter++;
          } // end of if
        } // end of for
      } // end of for
    
      OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
    
      System.out.println("Der Spieler hat " + counter + " Übereinstimmungen \r\n");
      out.write("Sie haben " + counter + " Übereinstimmungen \r\n");
      out.flush();
      if (counter == 3) {
        System.out.println("Der Spieler hat 13 Euro gewonnen \r\n");
        out.write("Ihr Gewinn beträgt 13 Euro! \r\n");
        out.flush();
      } // end of if
      if (counter == 4) {
        System.out.println("Der Spieler hat 150 Euro! \r\n");
        out.write("Ihr Gewinn beträgt 150 Euro! \r\n");
        out.flush();
      } // end of if
      if (counter == 5) {
        System.out.println("Der Spieler hat 10000 Euro! \r\n");
        out.write("Ihr Gewinn beträgt 10000 Euro! \r\n");
        out.flush();
      } // end of if
      if (counter == 6) {
        System.out.println("Der Spieler hat den Jackpot gecknackt! Sein Gewinn beträgt 10000000 Euro! Wir können nun Insolvenz anmelden. \r\n");
        out.write("Jackpot!!! Ihr Gewinn beträgt 10000000 Euro! Geh feiern du glücklicher Hund! \r\n");
        out.flush();
      } // end of if
    
    } // end of while
  
  }
}
 
Zuletzt bearbeitet:

olfibits

Aktives Mitglied
Er sollte sie eigentlich akzeptieren. Zumindest bricht der Client ab, wenn ich den Server zwischen durch schließe.
Du sagst es. Der Client bricht ab. Die Verbindung steht wohl also. Dann liegt das Problem definitiv am Server. Mach mal "Checkpoints" nach jedem Aufruf wie System.out.println("Verbindung akzeptiert") oder System.out.println("Stream geöffnet") um zu sehen wie weit er kommt.
 

ChuiOG

Mitglied
Server code:
Java:
for (i = 0; i < 6 ; i++) {
      zahl[i] = Integer.parseInt(sin.readLine());
      }

Also er kommt bis hier hin. Habe es auch ausgeschrieben in :
Java:
      zahl[0] = Integer.parseInt(sin.readLine());
      zahl[1] = Integer.parseInt(sin.readLine());
      zahl[2] = Integer.parseInt(sin.readLine());
      zahl[3] = Integer.parseInt(sin.readLine());
      zahl[4] = Integer.parseInt(sin.readLine());
      zahl[5] = Integer.parseInt(sin.readLine());

Aber er liest einfach nicht die Zahlen ein...
 

ChuiOG

Mitglied
Okay ich muss zugeben ich bin ein bisschen dumm :D Ich habe beim Client /r/n, anstatt \r\n... Klappt jetzt alles perfekt. Trotzdem danke für deine Hilfe!
 

mrBrown

Super-Moderator
Mitarbeiter
Machs dir leicht und wrap das ganze in 'nem PrintWriter, wenn du eh nur Text schickst ;)

Dann kannst du entweder println oder alternativ '%n' nutzen und es wird Plattformunabhängig ;)
 

Neue Themen


Oben