TIC TAC TOE-SPiel Netzwerkproblem

Status
Nicht offen für weitere Antworten.
C

C0ldC0re

Gast
Hallo Leute,

ich bin grade dabei ein kleines netzwerkfähiges TTT-Spiel zu programmieren!!

Doch nun bin ich an einer Stelle angelangt, an der ich wirklich verzweifel:

Der Borland JBuilder gibt mir dauernd aus, das handleConnection nicht statisch ist und er aus einem statischen Umfeld nicht auf eine nicht-statische Methode zugreifen kann! :### ???:L

Das Problem tritt gleich 2x auf: Zeile 45 und Zeile 67

Hier mein Quellcode:

Code:
package tictactoe;

import java.io.*;
import java.net.*;

public class server {
//============================Array========================================
    static int[][] array = new int[3][3];
//============================Streams======================================
  InputStream in;
  OutputStream out;
  DataInputStream DataIn = new DataInputStream(in);
  DataOutputStream DataOut = new DataOutputStream(out);
  int spielerid = 0;
//========================Behandlung einer Verbindung======================
    private void handleConnection(Socket client) throws IOException {
        in = client.getInputStream();
        out = client.getOutputStream();
        String inString = DataIn.readUTF();
        System.out.println("Ankommender String: " + inString);

        if (inString.contains("SrvArraySet")) {
            int pos1 = Integer.parseInt(inString.substring(12, 13));
            int pos2 = Integer.parseInt(inString.substring(14, 15));
            int wert = Integer.parseInt(inString.substring(16));
            SrvArraySet(pos1, pos2, wert);
        }
        //int factor1 = in.read();
        //int factor2 = in.read();
        //out.write(factor1 * factor2);
    }

    public static void main(String[] args) throws IOException {
        //============================ServerSockets================================
        final ServerSocket serversoc1 = new ServerSocket(3141);
        final ServerSocket serversoc2 = new ServerSocket(3142);
        //=======================Thread1===========================================
        class SrvThread1 implements Runnable {
            public void run() {
                while (true) {
                    Socket client = null;

                    try {
                        client = serversoc1.accept();
                        handleConnection(client);
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        if (client != null)
                            try {
                                client.close();
                            } catch (IOException e) {}
                    }
                }
            }
        }


        //=======================Thread2===========================================
        class SrvThread2 implements Runnable {
            public void run() {
                while (true) {
                    Socket client = null;

                    try {
                        client = serversoc2.accept();
                        handleConnection(client);
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        if (client != null)
                            try {
                                client.close();
                            } catch (IOException e) {}
                    }
                }
            }
        }
    }

    //======================SrvArraySet========================================
    public void SrvArraySet(int aPos1, int aPos2, int wert) throws IOException {
        System.out.println("Array Ausgabe: [" + aPos1 + "][" + aPos2 + "]= " +
                           array[aPos1][aPos2]);
        if (wert < 30) {
            spielerid = 1;
        } else {
            spielerid = 2;
        }
        if (array[aPos1][aPos2] == 0) {
            array[aPos1][aPos2] = wert;
            DataOut.writeUTF("Feld wurde für Spieler " + spielerid +
                             " markiert!");
        } else {
            if (array[aPos1][aPos2] == 1) {
                DataOut.writeUTF(
                        "Fehler: Feld ist schon von Spieler 1 markiert!");
            } else {
                if (array[aPos1][aPos2] == 30) {
                    DataOut.writeUTF(
                            "Fehler: Feld ist schon von Spieler 2 markiert!");
                }
            }
        }
    }
//======================SrvArrayRequest====================================
            /*  public void SrvArrayRequest() {
              }
             */
}

Könnt ihr mir helfen?

Das wäre supernett!!!! Danke schonmal im vorraus!

C0ldC0re :applaus:
 

L-ectron-X

Gesperrter Benutzer
Du brauchst eine Referenz auf ein Objekt von Server, um die Methode handleConnection() aufrufen zu können.
Das heißt, du erzeugst in der main()-Methode eine Instanz von Server und kannst auf dieser deine private Methode aufrufen.
 
C

C0ldC0re

Gast
Hey L-ectron-X,

danke für den Tipp, die Fehler sind weg!! :wink:

Jetzt hab ich nur das Problem, dass der Server einfach ausgeht, ohne das ein Fehler auftritt! (Prozess beendet)

Normalerweise sollte er ja mit den beiden Threads auf den beiden Ports nach anfragen horchen, dass tut er aber nciht mehr!

Hab ich das irgendwie flasch gemacht mit der Instanziierung (nettes Wort ^^)!

Hier nochmal der verbessserte Quellcode:

Code:
package tictactoe;

import java.io.*;
import java.net.*;

public class server {
//============================Array========================================
    static int[][] array = new int[3][3];
//============================Streams======================================
  InputStream in;
  OutputStream out;
  DataInputStream DataIn = new DataInputStream(in);
  DataOutputStream DataOut = new DataOutputStream(out);
  int spielerid = 0;
//========================Behandlung einer Verbindung======================
    private void handleConnection(Socket client) throws IOException {
        in = client.getInputStream();
        out = client.getOutputStream();
        String inString = DataIn.readUTF();
        System.out.println("Ankommender String: " + inString);

        if (inString.contains("SrvArraySet")) {
            int pos1 = Integer.parseInt(inString.substring(12, 13));
            int pos2 = Integer.parseInt(inString.substring(14, 15));
            int wert = Integer.parseInt(inString.substring(16));
            SrvArraySet(pos1, pos2, wert);
        }
        //int factor1 = in.read();
        //int factor2 = in.read();
        //out.write(factor1 * factor2);
    }

    public static void main(String[] args) throws IOException {
        //============================ServerSockets================================
        final ServerSocket serversoc1 = new ServerSocket(3141);
        final ServerSocket serversoc2 = new ServerSocket(3142);
        final server srv =new server();
        //=======================Thread1===========================================
        class SrvThread1 implements Runnable {
            public void run() {
                while (true) {
                    Socket client = null;

                    try {
                        client = serversoc1.accept();
                        srv.handleConnection(client);
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        if (client != null)
                            try {
                                client.close();
                            } catch (IOException e) {}
                    }
                }
            }
        }

//=======================Thread2===========================================
        class SrvThread2 implements Runnable {
            public void run() {
                while (true) {
                    Socket client = null;

                    try {
                        client = serversoc2.accept();
                        srv.handleConnection(client);
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        if (client != null)
                            try {
                                client.close();
                            } catch (IOException e) {}
                    }
                }
            }
        }
    }

    //======================SrvArraySet========================================
    public void SrvArraySet(int aPos1, int aPos2, int wert) throws IOException {
        System.out.println("Array Ausgabe: [" + aPos1 + "][" + aPos2 + "]= " +
                           array[aPos1][aPos2]);
        if (wert < 30) {
            spielerid = 1;
        } else {
            spielerid = 2;
        }
        if (array[aPos1][aPos2] == 0) {
            array[aPos1][aPos2] = wert;
            DataOut.writeUTF("Feld wurde für Spieler " + spielerid +
                             " markiert!");
        } else {
            if (array[aPos1][aPos2] == 1) {
                DataOut.writeUTF(
                        "Fehler: Feld ist schon von Spieler 1 markiert!");
            } else {
                if (array[aPos1][aPos2] == 30) {
                    DataOut.writeUTF(
                            "Fehler: Feld ist schon von Spieler 2 markiert!");
                }
            }
        }
    }
//======================SrvArrayRequest====================================
            /*  public void SrvArrayRequest() {
              }
             */
}

Danke!

C0ldC0re[/quote]
 
C

C0ldC0re

Gast
Hi L-ectron-X,

sry stehe grade auf dem Schlauch :autsch:

Wie Instanziiere und starte ich das denn jetzt vernünftig? ???:L

Aber warum lief der Server schonmal ohne diese Instanziierung?

C0ldC0re
 
C

C0ldC0re

Gast
Kann mir denn keiner einen kleinen Tipp geben?
Wäre echt nett!!

C0ldC0re
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben