Netzwerkspiel Client ruckelt

Status
Nicht offen für weitere Antworten.

Andi1804

Mitglied
Hallo Leute,
also ich hab in Java ein kleines Netzwerkspiel programmiert. Dabei hab ich beim Testen immer Server und Client auf den gleichen Rechner laufen lassen und immer über localhost verbunden. Bei diesen Tests funktionierte das Spiel einwandfrei. Werden Server und Client aber auf verschiedenen PCs ausgeführt, ruckelt der Client stark.

Hier mal eine kurze Übersicht wie alles Abläuft:

Der Server startet für jeden client (Anzahl vorher eingeben) einen Thread sobald dieser connected.
Sind alle Clients verbunden, startet auf dem Server im Hauptthread das Spiel.
Die nötigen Daten werden über DataInputStreams und DataOutputstreams übertragen vom jeweiligen Thread aus übertragen.

Der client hat keine extra Threads, er sendet regelmäßig bestimmte Tastertureingaben zum Server und ließt die ankommenden Daten, dazwischen aktualisiert er seine Spielwelt.

Ich würd gerne rausfinden, woher dieses ruckeln kommt.
Da es über localhost ohne Probleme läuft müsste doch irgendwas bei der Datenübertragung schief laufen. (vermut ich mal)
Kann mir wer erklären wie sich eine richtige Netzwerkverbindung im Gegensatz zur localhost Verbindung auf das Programm auswirkt?
Kann es sein, dass ich die Streams vieleicht puffern muss?

Ich hoffe mir kann geholfen werden.

mfg Andi
 

Pappenheimer++

Bekanntes Mitglied
Was hast du denn für ne Verbindung? TCP? Wenn das der fall sein sollte und du jedes Byte einzeln schickst (was sein kann, oder auch nicht: ich habe ja keinen Code gesehen), dann wird nach jedem Paket (also jedem Byte) erst ein ACK zurückgesendet, bevor es weitergehen kann. Das würde das ganze natürlich extremst ausbremsen. Aber poste doch mal Code. Wenn du das nicht willst, kannst du ja mal selbst Nachforschungen anstellen. Dazu kannst du dir Progs wie z.b. Wireshark besorgen, die dne Netzwerkverkehr für dich analysieren.
 

Andi1804

Mitglied
Ich muss gestehen, ich bin noch Anfänger in Sachen Netzwerk in Java. Aber laut meinem Java Buch wird bei den Socket Klassen TCP verwendet. Wird das ACK bei localhost connection denn nicht zurück gesendet?

Danke übrigens für deine Hilfe und hier noch etwas Code:

Also hier ist mal der Code der den Server eröffnet und die Clients annimmt:

Code:
import java.net.*;
import java.util.LinkedList;

public class server {

	private static int spielerzahl;
	private static ServerSocket serverS;
	private static LinkedList <Thread> threads;
	
	public static void öffneServer(int port,int spielerz){
		spielerzahl = spielerz;
		try{
			serverS = new ServerSocket(port);
			serverS.setSoTimeout(60000);
		}catch(Exception e){
			System.out.println(e);
		}
		
		
		if (spielerzahl <0){spielerzahl = 0;}
		if (spielerzahl >4){spielerzahl = 4;}
		threads=new LinkedList();
		for (int a = 1; a<=spielerzahl;a++){
			Thread b = new Thread(new client(a));
			threads.add(b);
		}
		System.out.println("starte Spiel");

		game spiel = new game();
		

	}
	
	public static void starteClientThreads(){
		for(int a = 0; a<spielerzahl; a++){
			System.out.println("starte Thread Nr. "+a);
			threads.get(a).start();
		}
	}
	
	public static ServerSocket getServerSocket(){
		return serverS;
	}
	
	public static int getSpielerzahl(){
		return spielerzahl;
	}
}


Und hier der Code der Clientklasse im Server (also die Klasse die die Daten zum Client sendet)

Code:
import java.net.*;
import java.io.*;

public class client implements Runnable {


	private DataInputStream in;
	private DataOutputStream out;
	
	private int clientnummer;
	
	private static Socket socket;
	
	public client(int nummer){
		clientnummer = nummer;
		try{
			socket = server.getServerSocket().accept();
		}catch(Exception e){
			System.out.println(e);
		}
		System.out.println("clientclasse im server akzeptiert verbindung");
		
		try{
			in = new DataInputStream(socket.getInputStream());
			out = new DataOutputStream( socket.getOutputStream());
		}catch(Exception e){
			System.out.println("in Clientklasse Streamproblem:");
			System.out.println(e);
		}
		
		Daten.spieler[clientnummer-1]= true;

	}
	
	public void run(){
		System.out.println("starte run");
		
		sendeBoolean(true);
		sendeInt(clientnummer);
		
		while(true){
			sendeDaten();
			
			Daten.setVorwärts(leseBoolean(), clientnummer);
			Daten.setRückwärts(leseBoolean(), clientnummer);
			Daten.setLinks(leseBoolean(), clientnummer);
			Daten.setRechts(leseBoolean(), clientnummer);
			Daten.setSchuss(leseBoolean(), clientnummer);
			
			
	         try {
		            Thread.sleep(15);
		         } catch (InterruptedException e) {
		            System.out.println(e);
		         }
		         
		}
	}
	
	

	private void sendeBoolean(boolean f){
		try{
			out.writeBoolean(f);
		}catch(Exception e){
			System.out.println("in Clientklasse writeproblem:");
			System.out.println("e");
		}
	}
	
	private  boolean leseBoolean(){
		try{
			return in.readBoolean();
		}catch(Exception e){
			System.out.println("in Clientklasse readproblem:");
			System.out.println("e");
			return false;
		}
	}
	
	private void sendeInt(int f){
		try{
			out.writeInt(f);
		}catch(Exception e){
			System.out.println("in Clientklasse writeproblem:");
			System.out.println("e");
		}
	}
	
	private void sendeFloat(float f){
		try{
			out.writeFloat(f);
		}catch(Exception e){
			System.out.println("int Clientklasse writeproblem:");
			System.out.println("e");
		}
	}
	
	
	private void sendeDaten(){
		sendeInt(Daten.lebensenergieSpieler[clientnummer-1]); //sende lebensenergie
		GameObject Objekt;
		int zähler = 0;
		
		while((Objekt = copyData(zähler))!= null){
			zähler ++;
			sendeBoolean(true);
			
			MyObject3D c = Objekt.getMyObject3D();
			float [] rotationMatrix = c.getRotationMatrix().getDump();
			sendeInt(c.getNetID());
			sendeInt(c.getObjektArt());
			sendeFloat(c.getTransformedCenter().x);
			sendeFloat(c.getTransformedCenter().y);
			sendeFloat(c.getTransformedCenter().z);
			
			for (int d = 0; d<rotationMatrix.length; d++){
				sendeFloat(rotationMatrix[d]);
			}
		}
		sendeBoolean(false);
	}
	
	private GameObject copyData(int nummer){
		try{
			return Daten.Objekte.get(nummer).copyObject();
		}catch(Exception e){
			return null;
		}
	}
	

	
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Netzwerkspiel Netzwerkprogrammierung 6
F Fragen zu Netzwerkspiel, ArrayList verschicken Netzwerkprogrammierung 5
R Netzwerkspiel im Browser spielbar machen Netzwerkprogrammierung 4
D Lags bei Netzwerkspiel. Netzwerkprogrammierung 2
hieuhp132 Server wird nicht auf zweiten Anfrage von Client geupdated Netzwerkprogrammierung 3
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
B Axis2 Webservice mit Client Zertifikat Authentifizierung Netzwerkprogrammierung 3
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
T Jetty mit Client-Zertifikat nur bei spezifischer URL Netzwerkprogrammierung 1
J Einlesen von Servernachrichten von TCP-Client Netzwerkprogrammierung 17
J Client-Server und SOAP Netzwerkprogrammierung 23
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
T Client zu Client Kommunikation Netzwerkprogrammierung 2
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
ruutaiokwu ständig "sender address rejected: improper use of smtp" bei smtp-client Netzwerkprogrammierung 4
J HTTP [Java 9] Neuer HTTP Client - Tutorial Netzwerkprogrammierung 3
A Chatserver/-client - Code stoppt bei readUTF() Netzwerkprogrammierung 7
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
L Zugriffprobleme Client - Webservice AspenTechnology Netzwerkprogrammierung 0
A Client Client Übertragung Netzwerkprogrammierung 12
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
K Socket Netty Client wirft Fehler! Netzwerkprogrammierung 3
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
U Client Soap Verbindung wieder schließen Netzwerkprogrammierung 0
U Socket Client mit hash authentifizieren Netzwerkprogrammierung 3
F HTTP HTTP Rest Client mit TLS1.2 und selbst signiertem Zertifikat Netzwerkprogrammierung 2
P Server als Client nutzen Netzwerkprogrammierung 8
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
Cromewell Socket Multithreaded Server und Client Netzwerkprogrammierung 1
Y Client/Server/DB communication Netzwerkprogrammierung 3
JavaWolf165 Socket mit .writeUtf etwas vom Client zum Server schicken Netzwerkprogrammierung 13
J Client - Serversocket Netzwerkprogrammierung 1
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
gamebreiti Socket Server / Client Anwendung Manipulation von Objekten durch Server Netzwerkprogrammierung 9
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
N Fragen zu Sockets Client Netzwerkprogrammierung 3
F Extasys TCp Client extends Funktion Netzwerkprogrammierung 0
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
O Client zwischen XML und JSON auswählen lassen Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
A Socket Wie ein einfacher Multithreads Service mit Telnet als Client mit Observable/Observer gelöst.... Netzwerkprogrammierung 0
K C# Server - Android Client Netzwerkprogrammierung 0
T Application Client NullPointerExc Netzwerkprogrammierung 7
V TCP Client funktioniert auf Emulator aber nicht auf Smartphone Netzwerkprogrammierung 5
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
H HTTP REST Jersey - PUT-Beispiel von Client senden Netzwerkprogrammierung 0
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
P HTTP Server / Client Netzwerkprogrammierung 1
N FTP FTP Client invalid IPv6 address (Apache Commons Net API) Netzwerkprogrammierung 6
F TCP Client, verbindung aufrecht halten Netzwerkprogrammierung 0
X RMI: Woher kennt der Client das Schnittstellen-Interface? Netzwerkprogrammierung 2
E Thematik Client server Netzwerkprogrammierung 2
D UDP Client empfängt nichts Netzwerkprogrammierung 2
D Client/Server per Crossover Lan Kabel Netzwerkprogrammierung 1
S Client Server Connection Netzwerkprogrammierung 4
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
S Client Anwendung mit zentraler SQL-Datenbank Netzwerkprogrammierung 3
N Client Identifikation eines Servers Netzwerkprogrammierung 1
S Sichere Server/Client Architektur Netzwerkprogrammierung 1
D Chat Server/mehre Client Netzwerkprogrammierung 9
I Server+Client Netzwerkprogrammierung 3
N Client am Server abmelden Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
D SSH Client Netzwerkprogrammierung 7
U Socket Instant Messanger (Server Linux, Client Windows) Netzwerkprogrammierung 1
B TCP Client Android Netzwerkprogrammierung 3
Athena Grundsatzfragen zu Client-Server-Architektur / Matchmaking Netzwerkprogrammierung 1
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
F Client Server DB Netzwerkprogrammierung 0
A Verständnisfrage Multi-Threaded Client/Server Netzwerkprogrammierung 5
F Tipps zum Thema Server/Client vie SOAP Netzwerkprogrammierung 0
OnDemand Ist Client noch angemeldet? Netzwerkprogrammierung 7
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
D Socket UDP Client reagiert nicht auf spontane Meldungen Netzwerkprogrammierung 5
R Zeitliche Syncronisation Server - Client Netzwerkprogrammierung 0
S Server-Client: Image senden Netzwerkprogrammierung 2
C Multithreading Client / Server erklärt Netzwerkprogrammierung 11
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
P server - client verbindung (anfänger) Netzwerkprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben