Netzwerkfähiges Spiel



  • Doppel-Ihh, Java 🤡

    Dann zeig mal deinen Code.



  • Das ist mein Code für den Client. Am Server liegts nicht. Wenn ich den Client wieder neu starte dann kommt auch wieder was vom Server zurück.



  • Peter_mueller12 schrieb:

    Am Server liegts nicht.

    Warum bist du dir da so sicher?
    Bei diesem Code muss der Server erst mal was senden, damit der Client was zurücksendet.



  • Ich tippe mal darauf, dass der Server kein Newline sendet.



  • Im Zweifel wer was sendet einfach mit Wireshark gucken.



  • Das ist der Server Code . Und ja dieses new Line das macht wohl Probleme. Warum eigentlich frag ich mich da. Aber das löst das Problem trotzdem noch nicht..

    String clientSentence="";
            String capitalizedSentence;
            ServerSocket welcomeSocket = new ServerSocket(6770);
    
            while(true)
            {
               Socket connectionSocket = welcomeSocket.accept();
               BufferedReader inFromClient =
                  new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
               DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
               clientSentence = clientSentence + inFromClient.readLine();
               System.out.println("Received: " + clientSentence);
               capitalizedSentence = clientSentence + '\n';
               System.out.println(capitalizedSentence);
               outToClient.writeBytes(capitalizedSentence); 
            }
    


  • Weißt du überhaupt, was der Code macht? Scheinbar nicht.

    Dieses .accept() ist bestimmt auch ein blocking call. Somit wartet der Server in jedem Schleifendurchgang immer erst auf eine neue Verbindung.
    Die kommt aber nur dann zustande, wenn du den Client (neu) startest.
    Also ein Client Neustart (connect->accept), ein Server send.

    Doofer Code. Doofes copy & paste.

    Guck dir an, wie man mit Sockets umgeht.



  • ok . Das hilft mir schon mal weiter 🙂
    Das Grundgerüst für Client , Server kopier ich mir eigentlich immer irgendwo, denn das ist ja eh alles gekapselt und programmiersprachen abhängig.

    Was muss ich denn dann statt dem accept verwenden. Oder kannst du mir mal nen link
    geben. Das mit dem new Line \n versteh ich trotzdem nicht ganz. Das ist wohl das Terminalzeichen für den Server bzw Client um zu senden...



  • Peter_Mueller schrieb:

    Was muss ich denn dann statt dem accept verwenden.

    Die Frage ist doch eher: Was genau willst du eigentlich machen?

    Ich würd mal bei 0 anfangen und nen eigenen Code schreiben und rumprobieren.



  • Warum find ich im Netz kein Client / Server Beispiel wo sowohl der Client als auch der Server beliebig oft senden und empfangen kann. Da muss man ja nicht mal nen extra Thread aufmachen oder...



  • Bau halt ne for-Schleife ein.



  • Programmieren != passendes Beispiel Suchen und leicht Anpassen.
    Lern Programmieren.



  • hustbaer schrieb:

    Programmieren != passendes Beispiel Suchen und leicht Anpassen

    Dochdoch.. so hab ich jedenfalls begonnen 😃

    Man muss sich halt zu helfen wissen, sprich trial & error. Aber wenn's schon an der Suchmaschine scheitert.. :p


  • Mod

    Hi schrieb:

    Man muss sich halt zu helfen wissen, sprich trial & error.

    Kennst du diese C-Programmierer, deren Code zwar nicht falsch, aber auch nicht richtig ist? 😃

    Aber wenn's schon an der Suchmaschine scheitert.. :p

    Wohl wahr.



  • Ich komm mit meinem Spiel voran. So jetzt bin ich im Hotel und habe meinen Laptop und mein Android Phone bei mir. Der Laptop hat 192.168.11.41 und das Phone 192.168.11.55 als IP . Erstaunlicherweise kann ich beide vom jeweils anderen Gerät nicht pingen. Ich wollte auf meinem Laptop den Client laufen lassen und hab das Phone als Server laufen lassen und das geht jetzt natürlich nicht. Was soll ich jetzt machen ? Unterbindet der Router im Hotel vielleicht das pingen ? Wahrscheinlich oder. Aus Sicherheitsgründen da man sonst andere Hotelgäste belästigen könnte. Wie kann ich meine Anwendung nun testen. Öffentliche IP meines Hotels ist 87.128.16.39 . Aber die hilft mir nicht oder...



  • Peter_Mueller schrieb:

    Unterbindet der Router im Hotel vielleicht das pingen ?

    Kann schon sein. Oder die Firewalls deiner Geräte.

    Du brauchst aber doch bestimmt keinen Ping für dein Spiel.



  • aber wenn ich nicht ping kann, dann kann ich mich auch nicht mit dem Server verbinden oder *gggg*



  • Doch, denn ein ("echter") Ping geht über's ICMP (welches wohl geblockt ist) während du für dein Spiel sicher TCP/UDP willst.



  • ok. Noch eine Frage. In meiner Activity gibt es natürlich eine onTouchEvent(MotionEvent e) Methode. Da passiert total viel drin. Nach Abarbeitung des gesamten Codes da drin soll der Server benachrichtigt werden. Wie mach ich das am besten. Ich stell mir das so vor.

    Server server = new Server(myActivity);
    

    Ich übergeb meinem Server also die Activity.

    class Server{
    Activity activity;
    
    public Server(Actitiy act)
    {
        this.activity = act;
    }
    
    }
    

    Wie wird der Server aber benachrichtigt dass die onTouchEvent Methode ausgeführt wurde. Und vorallem er soll ja benachrichtigt werden wenn diese fertig abgearbeitet wurden und dann über die Methode getValue() der Actitvity den neuen Wert holen....



  • Peter_Mueller schrieb:

    Nach Abarbeitung des gesamten Codes da drin soll der Server benachrichtigt werden. Wie mach ich das am besten.

    Man definiert ein Nachrichtenprotokoll und schickt entsprechende Datenpakete.


Anmelden zum Antworten