# Problem bei Socket (MultiplayerSpiel)



## MaxiMittel (20. Nov 2015)

Ich möchte ein relativ einfaches Multiplayer Spiel machen das Grundsätzliche Spiel ist auch nicht mein Problem sondern die Verbindung über einen Java Socket 
Mein Code:

```
public Character get Character1() {
    return character1;
}

@Override
public void start(Stage stage) throws Exception {

    new Thread(() -> {
        try {
            Socket socket;
            if (server) {
                ServerSocket serverSocket = new ServerSocket(8888);
                socket = serverSocket.accept();
                Platform.runLater(() -> {
                    time = System.currentTimeMillis();
                    System.out.println("Brakepoint0");

                });
            } else {
                socket = new Socket(address, 8888);
                Platform.runLater(() -> {
                    time = System.currentTimeMillis();
                    System.out.println("Brakepoint0.1");
                });
            }
            System.out.println("Brakepoint1");





            in = new DataInputStream(socket.getInputStream());
            out = new DataOutputStream(socket.getOutputStream());
            in = new DataInputStream(socket.getInputStream());

            while (true) {
                x = in.readInt();
                y = in.readInt();
                z = in.readInt();
                break;
            }
        } catch (Exception e) {
            System.out.println("Server error" + e.toString());
        }
    }).start();

    try {
        if(out != null){
            out.writeInt((int) character.getPosition().getX());
            out.writeInt((int) character.getPosition().getY());
            out.writeInt((int) character1.getPosition().getX());
            out.writeInt((int) character1.getPosition().getY());

        }
    }catch (Exception ex){

    }
    try{ 
        if(in != null){

           character1.setPosition(x,y);
           character.setPosition(x,y);


        }

    }catch (Exception ex){
    System.out.println(ex.toString());


    World.getInstance().initializeLevel("demo");
    View.getInstance().initializeView();
    View.getInstance().loadView();

    Scene scene = new Scene(View.getInstance().getRoot(), View.WIDTH.get() * 2, View.HEIGHT.get() * 2);

    stage.setScene(scene);
    stage.show();

}
```

Ich versuche es jetzt schon mehrere Tage herauszufinden warum es nicht funktioniert aber ich komme einfach nicht darauf es wird auch keine Exception geworfen


----------



## thecain (21. Nov 2015)

MaxiMittel hat gesagt.:


> *while* (*true*) {
> x = in.readInt();
> y = in.readInt();
> z = in.readInt();
> ...


Was soll das sein?



MaxiMittel hat gesagt.:


> }*catch* (Exception ex){
> System.out.println(ex.toString());


wo schliesst der catch?


MaxiMittel hat gesagt.:


> *public* Character get Character1() {
> *return* character1;
> }


das kompiliert nichtmal



MaxiMittel hat gesagt.:


> }*catch* (Exception ex){
> 
> }


kein wunder werden keine exceptions geworfen....


----------



## MaxiMittel (21. Nov 2015)

Ups also des erste da hab ich nen Fehler gemacht aber das 2 und 3 wurde falsch kopiert oder ich hatte nicht alles ausgewählt Sry


```
public class CharacterApp extends Application {
 
  
    static String address;
    static boolean server;
    DataInputStream in;
    DataOutputStream out;
    long time = 0;
    int x = 0, y = 0, z = 0;
  
    private Character  character;
  
    public Character getCharacter() {
        return character;
    }
  
    private Character character1;
  
    public Character getCharacter() {
        return character1;
    }
  
    @Override
    public void start(Stage stage) throws Exception {
      
      
        new Thread(() -> {
            try {
                Socket socket;
                if (server) {
                    ServerSocket serverSocket = new ServerSocket(8888);
                    socket = serverSocket.accept();
                    Platform.runLater(() -> {
                        time = System.currentTimeMillis();

                    });
                } else {
                    socket = new Socket(address, 8888);
                    Platform.runLater(() -> {
                        time = System.currentTimeMillis();
                    });
                }
              
              
                in = new DataInputStream(socket.getInputStream());
                out = new DataOutputStream(socket.getOutputStream());
                in = new DataInputStream(socket.getInputStream());
              
                try {
            if(out != null){
                out.writeInt((int) character.getPosition().getX());
                out.writeInt((int) character.getPosition().getY());
                out.writeInt((int) character 1.getPosition().getX());
                out.writeInt((int) character 1.getPosition().getY());
              
            }
        }catch (Exception ex){
          
        }
        try{
            if(in != null){
                             
              character1.setPosition(x,y);
               character.setPosition(x,y);
               System.out.println("in");

                   
            }
          
        }catch (Exception ex){
        System.out.println(ex.toString());
      
        }
              
              
              
                while (true) {
                    x = in.readInt();
                    y = in.readInt();
                    z = in.readInt();
                }
            } catch (Exception e) {
                System.out.println("Server error" + e.toString());
            }
        }).start();
      
        World.getInstance().initializeLevel("demo");
        View.getInstance().initializeView();
        View.getInstance().loadView();
      
        Scene scene = new Scene(View.getInstance().getRoot(), View.WIDTH.get() * 2, View.HEIGHT.get() * 2);

        stage.setScene(scene);
        stage.setTitle("Test");
        stage.show();
      
        View.getInstance().getHelp().show();
    
    }
}
```


----------



## dayaftereh (30. Apr 2016)

Hey, ich habe gesehen das du eine while true hast...


```
while (true) {
                    x = in.readInt();
                    y = in.readInt();
                    z = in.readInt();
}
```

Ich würde dein Server und Client einwenig Software technisch aus einander ziehen. Dem Server würde ich einen Acceptor gehen, der auf eingehende Verbidungen wartet und für jeden Client einen ServerDispatcher erzeugt.Der ServerDispatcher empfängt die Daten von Client, Interpret die daten und leitet sie an deine Welt / Spielt weiter.

Deinen Clients würde ich einen Connector geben, der sich mit dem Server verbindet und dann einen ClientDispatcher startet. 

In beiden Dispatcher kannst du dein dein Netzwerkprotokoll implementiern und die eingehenden Daten verarbeiten.

Denk drann das du dich in einem Multithreading Umgebung befindest und an manchen Stellen ThreadSafe sicherstellen musst.


----------



## JStein52 (30. Apr 2016)

Wenn ich das richtig sehe ist das Thema schon ein halbes Jahr alt und entweder lange gelöst oder nicht mehr relevant.


----------

