Senden von Daten nicht direkt möglich?

mavinatic

Bekanntes Mitglied
Hallo Community,

ich habe ein Problem und zwar möchte ich jedes mal auf einen bestimmten Tastendruck, Daten an einen Server versenden. Das Problem was ich habe ist, dass der Client aber nicht bei Tastendruck sendet, ich weiß einfach nicht warum?!

Java:
@Override
	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		System.out.println(e.getKeyCode());
		
		if(e.getKeyCode()==config.MOVEMENT_FORWARD)
		{
			Player player = panel.getPlayer(data.getCurrentPlayerName());
			if(player!=null)
			{
				int posY = player.getY();
				
				posY = posY - config.MOVEMENT_SPEED;
				handler.send("POST /refreshPositionSet?game="+data.getCurrentGameName()+"&playerName="+data.getCurrentPlayerName()+"&positionX="+player.getX()+"&positionY="+posY+" URLGS/1.0");
			}
		}

Handler.send(String msg):
Java:
public void send(String msg)
	{
		writer.println(msg);
		writer.flush();
	}

Der Writer ist ein PrintWriter.

Ich weiß nicht worans liegen könnte, denn ich mache jedes mal nach einer Nachricht ein flush();
 

ARadauer

Top Contributor
Ich weiß nicht worans liegen könnte,..
naja du hast zwei Probleme. Bei Tastendruck wird nicht gesendet. Wird der Tastendruck nicht erkannt oder geht das senden nicht.
Gibt mal einfach eine Consolen Ausgabe in das if(e.getKeyCode()==config.MOVEMENT_FORWARD)

und sende mal automatisch.

Dann wissen wir schonmal wo das Problem liegt...
 

mavinatic

Bekanntes Mitglied
Ich gebe immer die Taste aus welche ich gedrückt habe....also den KeyCode ;-) Das stimmt soweit, es ist nur die Übertragung?! die nicht stimmt
 

mavinatic

Bekanntes Mitglied
habe ich doch, da oben....in meinem ersten post, steht alles wie ich es mache...es wird einfach nicht direkt geschickt sondern nach ca. 30sekunden!? Was ich nicht verstehen kann?!
 

mavinatic

Bekanntes Mitglied
Dann funktioniert mein Programm nicht mehr :D weil ich vorher schon daten an den server sende ;-)

Klasse - DataHandler (Daten werden verarbeitet)
Java:
package org.game.client;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.List;

import org.game.gui.MainPanel;
import org.game.ressource.Player;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;


public class DataHandler {
	private Socket socket;
	private PrintWriter writer;
	private BufferedReader reader;
	
	private SAXBuilder xmlParser = null;
	private Thread tReader = null;
	
	private MainPanel panel = null;
		
	public DataHandler(Socket socket, MainPanel panel)
	{
		try
		{
			this.socket = socket;
			this.reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			this.writer = new PrintWriter(socket.getOutputStream());

			this.panel = panel;
			
			xmlParser = new SAXBuilder();
						
		} catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	
	public void recieve()
	{
		tReader = new Thread() {
			@Override
			public void run()
			{
				try {
					while(true)
					{
						String line = reader.readLine();
						if(line!=null)
						{
//							System.out.println(line);
							processCommand(line);
						}
					}
				} catch (Exception e) {
					// SocketClosedExceptioN!!
				}
			}
		};
		tReader.start();
	}
	
	public void send(String msg)
	{
		writer.println(msg);
		writer.flush();
	}
	
	public Socket getSocket()
	{
		return this.socket;
	}
	
	public void closeConnection(String gamename, String playername)
	{
		try
		{
			send("POST /closeConnection?game="+gamename+"&playerName="+playername+" URLGS/1.0");
			socket.close();	
			reader.close();
			writer.close();
		
		} catch(Exception e){}
	}
	
	public void processCommand(String cmd)
	{
		try
		{
			Document doc = xmlParser.build(new ByteArrayInputStream(cmd.getBytes()));
			
			Element rootElement = doc.getRootElement();
			
			if(rootElement.getName().toUpperCase().equals("REQUEST"))
			{
				Element player = rootElement.getChild("PLAYERS");
				
				List<Element> players = player.getChildren();
				
				Player[] currentPlayers = new Player[players.size()];
				
				for(int i=0;i<players.size();i++)
				{
					String playerName = players.get(i).getChild("NAME").getValue();
					int playerPositionX = Integer.parseInt(players.get(i).getChild("X").getValue());
					int playerPositionY = Integer.parseInt(players.get(i).getChild("Y").getValue());
					currentPlayers[i] = new Player(playerName, playerPositionX, playerPositionY);
				}
				
				panel.setPlayers(currentPlayers);
			}
			if(rootElement.getName().toUpperCase().equals("COMMONREQUEST"))
			{
				Element player = rootElement.getChild("PLAYERS");
				
				List<Element> players = player.getChildren();
				
				Player[] currentPlayers = new Player[players.size()];
				
				for(int i=0;i<players.size();i++)
				{
					String playerName = players.get(i).getChild("NAME").getValue();
					int playerPositionX = Integer.parseInt(players.get(i).getChild("X").getValue());
					int playerPositionY = Integer.parseInt(players.get(i).getChild("Y").getValue());
					currentPlayers[i] = new Player(playerName, playerPositionX, playerPositionY);
					System.out.println(currentPlayers[i].getName());
				}
				
				panel.setPlayers(null);
				panel.setPlayers(currentPlayers);
			}
		} catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}

Klasse - ControlListener (Key & Mouse -Aktionen werden verarbeitet)
Java:
package org.game.gui;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import org.game.client.Configuration;
import org.game.client.DataHandler;
import org.game.client.SharedData;
import org.game.ressource.Player;

public class ControlListener implements KeyListener, MouseListener {
	
	private Configuration config = null;
	private DataHandler handler = null;
	private SharedData data = null;
	private MainPanel panel = null;
	
	public ControlListener(MainPanel panel, SharedData data) throws Exception
	{
		this.panel = panel;
		
		this.handler = panel.getDataHandler();
		
		this.data = data;
		
		this.config=data.getConfiguration();
		
		
		if(data.getConfiguration()==null)
		{
			throw new Exception ("No Configuration File");
		}	
	}
	
	@Override
	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		System.out.println(e.getKeyCode());
		
		if(e.getKeyCode()==config.MOVEMENT_FORWARD)
		{
			Player player = panel.getPlayer(data.getCurrentPlayerName());
			if(player!=null)
			{
				int posY = player.getY();
				
				posY = posY - config.MOVEMENT_SPEED;
				System.out.println("POST /refreshPositionSet?game="+data.getCurrentGameName()+"&playerName="+data.getCurrentPlayerName()+"&positionX="+player.getX()+"&positionY="+posY+" URLGS/1.0");
				handler.send("POST /refreshPositionSet?game="+data.getCurrentGameName()+"&playerName="+data.getCurrentPlayerName()+"&positionX="+player.getX()+"&positionY="+posY+" URLGS/1.0");
			}
		}
		
		if(e.getKeyCode()==config.MOVEMENT_BACKWARD)
		{
			Player player = panel.getPlayer(data.getCurrentPlayerName());
			if(player!=null)
			{
				int posY = player.getY();
				
				posY = posY + config.MOVEMENT_SPEED;
				System.out.println("POST /refreshPositionSet?game="+data.getCurrentGameName()+"&playerName="+data.getCurrentPlayerName()+"&positionX="+player.getX()+"&positionY="+posY+" URLGS/1.0");
				handler.send("POST /refreshPositionSet?game="+data.getCurrentGameName()+"&playerName="+data.getCurrentPlayerName()+"&positionX="+player.getX()+"&positionY="+posY+" URLGS/1.0");
			}
		}
		
		if(e.getKeyCode()==config.MOVEMENT_LEFT)
		{
			Player player = panel.getPlayer(data.getCurrentPlayerName());
			if(player!=null)
			{
				int posX = player.getX();
				
				posX = posX - config.MOVEMENT_SPEED;
				System.out.println("POST /refreshPositionSet?game="+data.getCurrentGameName()+"&playerName="+data.getCurrentPlayerName()+"&positionX="+posX+"&positionY="+player.getY()+" URLGS/1.0");
				handler.send("POST /refreshPositionSet?game="+data.getCurrentGameName()+"&playerName="+data.getCurrentPlayerName()+"&positionX="+posX+"&positionY="+player.getY()+" URLGS/1.0");
			}
		}
		
		if(e.getKeyCode()==config.MOVEMENT_RIGHT)
		{
			Player player = panel.getPlayer(data.getCurrentPlayerName());
			if(player!=null)
			{
				int posX = player.getX();
				
				posX = posX + config.MOVEMENT_SPEED;
				System.out.println("POST /refreshPositionSet?game="+data.getCurrentGameName()+"&playerName="+data.getCurrentPlayerName()+"&positionX="+posX+"&positionY="+player.getY()+" URLGS/1.0");
				handler.send("POST /refreshPositionSet?game="+data.getCurrentGameName()+"&playerName="+data.getCurrentPlayerName()+"&positionX="+posX+"&positionY="+player.getY()+" URLGS/1.0");
			}
		}
	}

	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

}

Klasse - MainPanel (Oberfläche zum zeichnen)
Java:
package org.game.gui;


import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.net.Socket;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

import org.game.client.DataHandler;
import org.game.client.SharedData;
import org.game.ressource.Player;

public class MainPanel extends JPanel {
	/*
	 * GameInfo
	 */
	private DataHandler handler = null;
	private Player[] currentPlayers = null;
	private SharedData data = null;
	
	/*
	 * Graphical Inits.
	 */
	private Image backBuffer = null;
	Image img = null; // TestImage
	
	/*
	 * Control Listener/Panels
	 */
	private ControlListener listener = null; 
	
	public MainPanel(SharedData data, Socket socket) throws Exception
	{
		this.data = data;
		this.handler = new DataHandler(socket, this);
		
		this.listener = new ControlListener(this, data);
		
		testPrepare();
		init();
		gameloop();
	}
	
	private void testPrepare() {
		handler.send("POST /createGame?name="+data.getCurrentGameName()+"&maxPlayers=10 URLGS/1.0");
		handler.send("POST /addNewPlayer?playerName="+data.getCurrentPlayerName()+"&playerPositionX=100&playerPositionY=500&game="+data.getCurrentGameName()+" URLGS/1.0");
//		handler.closeConnection(data.getCurrentGameName(), data.getCurrentPlayerName());
	}
	
	/*
	 * Initialisieren
	 * Spielname festlegen
	 * 
	 * Spieler / Position abfragen
	 */
	public void init()
	{
		setFocusable(true);
		requestFocus();
		setDoubleBuffered(false);
		addKeyListener(listener);
		
		try {
			img = ImageIO.read(new File("pic/blue.PNG"));
		} catch(Exception e)
		{
			e.printStackTrace();
		}
		
		handler.recieve();
		handler.send("GET /commonRequest?game=XYZ URLGS/1.0");
		
		//Draw BackBufferImage
		renderScreen();
		//Set BackBuffer to Front
		repaint();
	}
	
	private void gameloop()
	{
		Thread loop = new Thread() {
			@Override
			public void run() 
			{
				try
				{
					while(true)
					{
						/*
						 * Playerpositions
						 */
						handler.send("GET /refreshPositionGet?game=XYZ URLGS/1.0");
						/*
						 * Maybe healthpoints / or smth like that
						 * Just space for later ;)
						 */
						renderScreen();
						repaint();
						Thread.sleep(data.getRate());
					}
				} catch(Exception e)
				{
					e.printStackTrace();
				}
			}
		};
		loop.start();
	}
	/*
	 * 
	 * Graphic Methods
	 * 
	 */
	public void renderScreen()
	{
		if(backBuffer==null)
		{
			createBackBuffer();
		} else
		{
			Graphics graph = backBuffer.getGraphics();
			
			graph.setColor(Color.WHITE);
			graph.fillRect(0, 0, getWidth(), getHeight());
			
			if(currentPlayers!=null)
			{
				for(int i=0;i<currentPlayers.length;i++)
				{
					graph.drawImage(img, currentPlayers[i].getX(), currentPlayers[i].getY(), this);
				}
			}
			
		}		
	}
	
	@Override
	public void paint(Graphics g)
	{
		if(backBuffer!=null)
		{
			g.drawImage(backBuffer, 0, 0, null);
		} else 
		{
			createBackBuffer();
			renderScreen();
		}
	}
	
	private void createBackBuffer() 
	{
		backBuffer = createImage(getWidth(), getHeight());
	}
	
	
	/*
	 * GETTER & SETTER
	 */
	public void setPlayers(Player[] players)
	{
		this.currentPlayers = players;
	}
	
	public Player[] getPlayers()
	{
		return this.currentPlayers;
	}
	
	public Player getPlayer(String name)
	{
		for(int i=0;i<currentPlayers.length;i++)
		{
			if(currentPlayers[i].getName().equals(data.getCurrentPlayerName()))
			{
				return currentPlayers[i];
			}
		}
		return null;
	}
	
	public DataHandler getDataHandler()
	{
		return this.handler;
	}
}

Ich habe nun einen Test gemacht! Und zwar bei der send-Methode 2 Ausgaben:

Java:
public void send(String msg)
	{
		if(!msg.equals("GET /refreshPositionGet?game=XYZ URLGS/1.0"))
		{
			System.out.println(msg);
		}
		
		writer.println(msg);
		writer.flush();
		if(!msg.equals("GET /refreshPositionGet?game=XYZ URLGS/1.0"))
		{
			System.err.println(msg);
		}
	}

Also es werden alle Ausgaben gesendet....weil jede Tasten eingabe wird mit dem flush verarbeitet....also muss das Problem Serverseitig liegen!?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Daten per API senden, parallel Netzwerkprogrammierung 9
S Daten über TCP/IP senden Netzwerkprogrammierung 3
fLooojava Daten an ein Arduino im selben Netzwerk senden Netzwerkprogrammierung 1
S Server - Mehrere Klassen sollen Daten senden und empfangen Netzwerkprogrammierung 25
P Socket Daten senden mit ServerSocket? Netzwerkprogrammierung 2
D daten per post senden Netzwerkprogrammierung 3
S Probleme beim senden von Daten per POST Methode an PHP Scrip Netzwerkprogrammierung 5
F Daten senden und empfangen mit Applet Netzwerkprogrammierung 8
C Flash Daten an Java senden, wie serialisieren? Netzwerkprogrammierung 3
E rxtx serielles senden von Daten Netzwerkprogrammierung 2
D Socket, Daten über BufferedWriter senden Netzwerkprogrammierung 18
M Einfachste Möglichkeit aus'm Applet Daten an Server senden Netzwerkprogrammierung 6
A daten an php script per post senden und ausgabe einlesen Netzwerkprogrammierung 6
M Socket Senden an alle verbundenen Clients Netzwerkprogrammierung 3
S Socket Bilder über Socket Senden Netzwerkprogrammierung 0
E Socket Befehl senden und antowrt bekommen ! Netzwerkprogrammierung 1
L Strings an Server senden und in MYSQL speichern? Netzwerkprogrammierung 3
L Socket Nachrichten senden Netzwerkprogrammierung 3
D Socket Message an einen Server senden? Netzwerkprogrammierung 8
J HTTP Befehl via HTTP senden ohne Browser öffnen Netzwerkprogrammierung 3
B Java+Grbl: G-Code Befehle mit Java an Arduino senden und lesen Netzwerkprogrammierung 1
M Socket Bilder senden Netzwerkprogrammierung 1
H HTTP REST Jersey - PUT-Beispiel von Client senden Netzwerkprogrammierung 0
W Socket Byte Array senden Netzwerkprogrammierung 2
G Mail senden funktioniert nicht mit SSL Netzwerkprogrammierung 7
M MultiClient Server - Senden an alle Clients Netzwerkprogrammierung 8
X UDP - Zu großes Paket senden Netzwerkprogrammierung 1
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
M Teilnehmerliste vom Server auch an alle Clients senden Netzwerkprogrammierung 0
I Kleine Dateien senden Netzwerkprogrammierung 3
K ByteArray über Netzwerk senden klappt nicht Netzwerkprogrammierung 5
S Server-Client: Image senden Netzwerkprogrammierung 2
B Socket BufferedImage senden "ohne speichern" Netzwerkprogrammierung 7
Z Socket Probleme beim Senden und Empfangen Netzwerkprogrammierung 5
Z Probleme beim Senden von Nachrichten an den Server Netzwerkprogrammierung 9
K Socket Senden und abspeichern Netzwerkprogrammierung 34
T ArrayList über Netzwerk senden! Netzwerkprogrammierung 5
M Gleicher Port für Senden und Empfangen ? Netzwerkprogrammierung 17
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
T Empfangen klappt Senden nicht - Connection timed out Netzwerkprogrammierung 12
D Strings per Schleife zum Client senden Netzwerkprogrammierung 4
B SSH mit Jsch, mehrere Befehle senden Netzwerkprogrammierung 4
A Socket Server: Message an verschiedene Clients senden Netzwerkprogrammierung 4
F Verschiedene Datentypen senden Netzwerkprogrammierung 4
M Befehle an externes Java-Programm senden Netzwerkprogrammierung 8
1 Datei senden/empfangen funzt nicht... Netzwerkprogrammierung 5
M Objekt über socket senden/empfangen Netzwerkprogrammierung 3
Weltall 7 HTTP Dateien an PHP-Skript senden Netzwerkprogrammierung 11
T Outputstream Byte-Array senden Netzwerkprogrammierung 2
N Senden eines Arrays Netzwerkprogrammierung 6
F Char über Netzwerk senden Netzwerkprogrammierung 6
C Befehle über ein GUI an Server senden Netzwerkprogrammierung 15
J Befehle an Server senden Netzwerkprogrammierung 5
L Zeitspanne für erneutes senden Netzwerkprogrammierung 16
Kr0e Ggf. Performanceproblem durch Senden von vielen kleinen Buffern Netzwerkprogrammierung 17
S Socket OutputStreams senden zu oft Netzwerkprogrammierung 6
D Probleme bei mehreren Clients uns Senden von Messages Netzwerkprogrammierung 16
F Erhalten und Senden von Nachrichten anhand des Indexes des Clients Netzwerkprogrammierung 19
Akrillo Datei per Netzwerk senden Netzwerkprogrammierung 10
KeNnY_tHe_OwNeR Empfangen geht, Senden nicht ?! Netzwerkprogrammierung 18
B Befehle an Gameserver senden bzw. empfangen Netzwerkprogrammierung 2
P Probleme beim weiter senden von Datein Netzwerkprogrammierung 10
T HttpClient - Senden via Post Netzwerkprogrammierung 12
Q Datein von Windows nach Mac senden Netzwerkprogrammierung 4
S Bild-Datei von Servlet an Browser senden Netzwerkprogrammierung 8
M Dateien über TCP/IP senden Netzwerkprogrammierung 18
Q NullPointExeption beim Versuch byte[] zu senden/writen Netzwerkprogrammierung 3
R Mehrere Dateien über einen Socket senden Netzwerkprogrammierung 2
G Information an Server senden? Netzwerkprogrammierung 4
D PDF und integer senden Netzwerkprogrammierung 6
M BufferedImage an PHP-Script senden Netzwerkprogrammierung 4
J Problem beim Senden von File Netzwerkprogrammierung 4
S String[] über Socket senden Netzwerkprogrammierung 3
G unbekannte Zeichen beim senden und lesen Netzwerkprogrammierung 2
V Mehrere Streams durch einen Stream senden Netzwerkprogrammierung 14
T Image aus Applet an PHP Seite senden? Netzwerkprogrammierung 3
D BufferedImage über das Netzwerk senden Netzwerkprogrammierung 2
A Broadcast - senden eines Packetes an alle rechner im netz Netzwerkprogrammierung 15
R Bytes als Rohdaten über Socket senden Netzwerkprogrammierung 3
V Problem beim Senden von Dateien Netzwerkprogrammierung 4
W Hexadezimal über RS232 senden Netzwerkprogrammierung 9
L webformular automatisch erstellen, senden und auswerten . Netzwerkprogrammierung 2
G Anfrage an Suchmaschine senden Netzwerkprogrammierung 11
M TCP Socket und Server int senden und empfangen Netzwerkprogrammierung 6
M datagramSocket senden u. empangen? Netzwerkprogrammierung 2
V Java /Matrizen senden über TCP/IP / double Netzwerkprogrammierung 2
W Socket Client-Server Verbindung. Wie Strings senden? Netzwerkprogrammierung 6
M HTTP Requests verarbeiten und Response senden mit Java Netzwerkprogrammierung 14
G Problem bei Objekt senden von server zu client Netzwerkprogrammierung 6
K RMI und kontinuirliches senden von Datenpacketen Netzwerkprogrammierung 2
N Messwerte über TCP senden Netzwerkprogrammierung 3
F Datei senden und empfangen Netzwerkprogrammierung 4
M Ein HTTP-request aus Java heraus senden Netzwerkprogrammierung 3
N Hexcode an ein Programm senden. Netzwerkprogrammierung 4
I Dateien schnell/synchron senden Netzwerkprogrammierung 2
T Datei senden Netzwerkprogrammierung 3
B Variablen an Server senden Netzwerkprogrammierung 14
R Problem beim Senden von Emails (Javamail) Netzwerkprogrammierung 2
G Strings über Sockets senden Netzwerkprogrammierung 5
J JavaMail Exception bei senden an anderen Server. Netzwerkprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben