Socket Spiel verspätung

Underpay0299

Mitglied
Hallo alle,
ich habe mal ein Spiel programmiert. Nun probiere ich, einen Multiplayer zu programmieren. Das geht soweit. Allerdings gibt es eine Verspatung von einer halben bis fünf Minuten.

Aufbau:



Empfänger A <-- Server 1 <-- Sender B
Sender A --> Server 2 -->Empfänger A

Empfänger A:
Code:
package Online;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Online {

 public static void main (String[] args)

  throws IOException, UnknownHostException {

  Socket Anschluss = new Socket(Variablen.ip,4000);
  PrintWriter Ausgabe= new PrintWriter(Anschluss.getOutputStream(),true);
  InputStreamReader PortLeser=new InputStreamReader(Anschluss.getInputStream());
  BufferedReader Eingabe= new BufferedReader(PortLeser);
  while(true){
  
  
   /*try {
       Thread.sleep(20);
   } catch (InterruptedException e) {e.printStackTrace();}*/
 
 
      System.out.println("Entfangen");
    
         String S =Eingabe.readLine();
      
         System.out.println(S);
        
         try{
        
         String[] splitStr = S.split("\\s+");
      
           Variablen.player_b_y = Integer.parseInt(splitStr[0]);
           Variablen.player_b_x = Integer.parseInt(splitStr[1]);
           Variablen.dotsb = Integer.parseInt(splitStr[2]);
        
      
          
       }catch(NullPointerException e){}
         catch(ArrayIndexOutOfBoundsException e){}
  
    
}}}

Client A:
Code:
package Online;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {

 public static void main (String[] args)

  throws IOException, UnknownHostException {

  Socket Anschluss = new Socket("localhost",4001);
  PrintWriter Ausgabe= new PrintWriter(Anschluss.getOutputStream(),true);
  InputStreamReader PortLeser=new InputStreamReader(Anschluss.getInputStream());
  BufferedReader Eingabe= new BufferedReader(PortLeser);
  while(true){
  
  
   /*try {
       Thread.sleep(20);
   } catch (InterruptedException e) {e.printStackTrace();}*/

      Ausgabe.println(Variablen.player_y +" "+ Variablen.player_x + " " + Variablen.dots + " " +  Variablen.hy +" "+ Variablen.hx);
 
}}}

Server 1:
Code:
package Server;
import java.net.*; import java.io.*;

public class Server  {
   static public String S = null;

 public static void main (String[] args) throws IOException {

   ServerSocket anschluss = new ServerSocket(4001);
   System.out.println("Ich lausche.");
   Socket lauschen=anschluss.accept();
   System.out.println("Player A has connected!");
   Socket lauschen1=anschluss.accept();
   System.out.println("Player B has connected!");
   InputStreamReader PortLeser= new InputStreamReader(lauschen.getInputStream());
   BufferedReader Eingabe= new BufferedReader(PortLeser);
   PrintWriter Ausgabe= new PrintWriter(lauschen1.getOutputStream(),true);
  while (true) {


               try {
                  
                   S = Eingabe.readLine();
                   System.out.println("klick " + S);
                   Ausgabe.println(S);
                
               } catch (IOException e) {e.printStackTrace();}

  }

}}

Server 2:
Code:
package Server;
import java.net.*; import java.io.*;

public class Server2  {
   static public String S = null;

 public static void main (String[] args) throws IOException {
  
   ServerSocket anschluss = new ServerSocket(4000);
   System.out.println("Ich lausche.");
   Socket lauschen=anschluss.accept();
   System.out.println("Player A has connected!");
   Socket lauschen1=anschluss.accept();
   System.out.println("Player B has connected!");
   InputStreamReader PortLeser= new InputStreamReader(lauschen1.getInputStream());
   BufferedReader Eingabe= new BufferedReader(PortLeser);
   PrintWriter Ausgabe= new PrintWriter(lauschen.getOutputStream(),true);
  while (true) {


               try {
                   S = Eingabe.readLine();
                   Ausgabe.println(S);
               } catch (IOException e) {e.printStackTrace();}
               System.out.println(S);

  }

}}

Empfänger B:
Code:
package Online;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Onlineb {
   static String S = null;

 public static void main (String[] args)

  throws IOException, UnknownHostException {

  Socket Anschluss = new Socket(Variablen.ip,4001);
  PrintWriter Ausgabe= new PrintWriter(Anschluss.getOutputStream(),true);
  InputStreamReader PortLeser=new InputStreamReader(Anschluss.getInputStream());
  BufferedReader Eingabe= new BufferedReader(PortLeser);
  while(true){
      
      
       /*try {
           Thread.sleep(20);
       } catch (InterruptedException e) {e.printStackTrace();}*/
      
  

        
         S =Eingabe.readLine();
         System.out.println(S);
         System.out.println("Empfangenb");
  
   try{
         String[] splitStr = S.split("\\s+");
      
           Variablen.player_y = Integer.parseInt(splitStr[0]);
           Variablen.player_x = Integer.parseInt(splitStr[1]);
           Variablen.dots = Integer.parseInt(splitStr[2]);
           Variablen.hy = Integer.parseInt(splitStr[3]);
           Variablen.hx = Integer.parseInt(splitStr[4]);
          
      
      
   }catch(NullPointerException e){}
   catch(java.lang.ArrayIndexOutOfBoundsException e){}
  
}}}

Sender B:
Code:
package Online;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client_b {

 public static void main (String[] args)

  throws IOException, UnknownHostException {

  Socket Anschluss = new Socket("localhost",4000);
  PrintWriter Ausgabe= new PrintWriter(Anschluss.getOutputStream(),true);
  InputStreamReader PortLeser=new InputStreamReader(Anschluss.getInputStream());
  BufferedReader Eingabe= new BufferedReader(PortLeser);
  while(true){
      
      
       /*try {
           Thread.sleep(20);
       } catch (InterruptedException e) {e.printStackTrace();}*/
      
  
      Ausgabe.println(Variablen.player_b_y +" "+ Variablen.player_b_x + " " + Variablen.dotsb);
    
    

      System.out.println("Gesendetb");
}}}


Ich würde mich über eine baltige antwort freuen.
LG
PaZi

Windows 10 64 bit user
 

JuKu

Top Contributor
Habe mir jetzt nicht den ganzen Code durchgelesen, aber du nutzt derzeit eine synchrone Verbindung, d.h. du kannst nicht wie bei einer asynchronen Verbindung quasi gleichzeitig lesen und schreiben.
Dies ist bei Multiplayer Spielen mit gewünschter geringer Latenz ein großes Problem.
 

Ähnliche Java Themen

Neue Themen


Oben