Koordinaten Übermittlung

Mariansen

Neues Mitglied
Servus,
Hab mich mal an nem kleinem Projekt versucht wo man die Server-Mauskoordinaten an den Client Rechner übermittelt. Das funktioniert soweit auch ganz gut aber nun habe ich das Problem, dass anscheinend viele Koordinaten übersprungen werden.
Hier mein Quellcode, der für das Empfangen der Daten im Client verantwortlich ist:

Java:
public class Client {

	public static void main(String[] args) throws UnknownHostException, IOException, AWTException, InterruptedException {
		Socket server=new Socket("192.168.2.147",6789);
		Scanner in =new Scanner(server.getInputStream());
		Robot rob =new Robot();
		int x;
		int y;
		while(true){
			x = in.nextInt();
			y = in.nextInt();
			System.out.println(x);
			rob.mouseMove(x, y);
		}
	}
}

Hier ist die handleConnection Methode vom Server:

Java:
public static void handleConnection(Socket client) throws IOException{
		
		Pos th =new Pos();
		th.start();
		
		PrintWriter out=new PrintWriter(client.getOutputStream(),true);
		
		 while(true){
			
			 out.println(Pos.px);
			 out.println(Pos.py);
			out.flush();
		}
	
	}

wäre wirklich cool wenn mir jemand ne Antwort geben könnte.
Grüße.
 

Kevin94

Top Contributor
Ich sehe bei dem Code zwei Bottlenecks: Zum einen das Umwandeln der Positionen in Strings, man könnte die Daten auch binär übertragen um den Durchsatz zu erhöhen. Zum anderen, wenn mehrfach die selben Positionen übertragen werden, ist das einlesen der Positionen (wovon du den Code weggelassen hast) das Problem, worauf du allerdings wenig Einfluss hast.
Ein weiteres Problem könnte die fehlende Synchronisation zwischen den beiden Threads sein. Wenn ich dafür überhaupt zwei Threads verwendet hätte, würde ich die eingelesenen Positonen in eine Queue schreiben und im Schreib-Thread diese Queue auslesen. Das vermeidet auch das Problem, dass du eine "ungültige" Position überträgst, so kann es dir nämlich passieren dass du den X-Wert der alten Position überträgst, dann der andere Thread ausgeführt, eine neue Position eingelesen wird, und der Y-Wert der neuen Position übertragen wird.
 

Neue Themen


Oben