Note that there are some explanatory texts on larger screens.

plurals
  1. PONetwork sent Vector only updates once in client?
    primarykey
    data
    text
    <p>Okay, so I'm trying to send a vector of objects from server to client. the clients take control of one object from the vector and send it's x and y to the server vector.</p> <p>Now the server is running fine from what I can tell. things are updating in real time, but the client only seems to update right once - when it starts.</p> <p>this is the client code:</p> <pre><code>import org.newdawn.slick.AppGameContainer; import org.newdawn.slick.BasicGame; import org.newdawn.slick.Color; import org.newdawn.slick.GameContainer; import org.newdawn.slick.Graphics; import org.newdawn.slick.Input; import org.newdawn.slick.SlickException; import java.io.*; import java.net.*; import java.util.Vector; public class SlickClient extends BasicGame{ ClientThread ct; Vector&lt;Player&gt; players; Player me; int ALL_KEYS = 0xFF; boolean keys[]; public SlickClient() { super("Test Online Client - by William Starkovich"); } public void init(GameContainer gc) throws SlickException { try{ keys = new boolean[ALL_KEYS]; for(int i = 0; i &lt; ALL_KEYS; i++){ keys[i] = false; } players = new Vector&lt;Player&gt;(); connect(); } catch(Exception e){ } } public void connect(){ String ip = "127.0.0.1"; ct = new ClientThread(ip); ct.start(); ct.setPriority(Thread.MAX_PRIORITY); me = ct.me; players = ct.players; } public void update(GameContainer gc, int delta)throws SlickException{ controls(); players = new Vector&lt;Player&gt;(); System.out.println("ct size: " + ct.players.size()); me = ct.me; players = ct.players; } public void render(GameContainer gc, Graphics g) throws SlickException{ g.setColor(Color.black); g.fillRect(0,0,640,480); for(int i = 0; i &lt; players.size(); i++){ g.setColor(Color.cyan); g.fillRect(players.get(i).x, players.get(i).y, 50, 50); } g.drawString("Players: " + players.size(), 50, 10); } public void keyPressed(int key, char c) { keys[key] = true; } public void keyReleased(int key, char c) { keys[key] = false; } public void controls(){ if(keys[Input.KEY_UP]){ me.y--; } else if(keys[Input.KEY_DOWN]){ me.y++; } else if(keys[Input.KEY_LEFT]){ me.x--; } else if(keys[Input.KEY_RIGHT]){ me.x++; } } public static void main(String[] args) throws SlickException{ AppGameContainer app = new AppGameContainer( new SlickClient() ); app.setShowFPS(false); app.setAlwaysRender(true); app.setTargetFrameRate(60); app.setDisplayMode(800, 600, false); app.start(); } } class ClientThread extends Thread implements Runnable{ Socket socket; Vector&lt;Player&gt; players; int playerID; Player me; DataOutputStream out; ObjectInputStream in; boolean loop = true; @SuppressWarnings("unchecked") public ClientThread(String ip){ super("ClientThread"); try{ this.players = new Vector&lt;Player&gt;(); socket = new Socket(ip, 4444); socket.setTcpNoDelay(true); out = new DataOutputStream(socket.getOutputStream()); in = new ObjectInputStream(socket.getInputStream()); playerID = in.readInt(); this.players = (Vector&lt;Player&gt;) in.readObject(); if(this.players != null) System.out.println("Not Null: " + this.players.size()); boolean b = false; for(int i = 0; i &lt; this.players.size(); i++){ if(!b){ if(this.players.get(i).id == playerID){ me = this.players.get(i); b = true; } } } } catch(Exception e){ e.printStackTrace(); } } public void run(){ try{ while(loop){ try{ if(!socket.isClosed() &amp;&amp; socket.isConnected()){ out.writeInt(me.x); out.writeInt(me.y); out.flush(); this.players = new Vector&lt;Player&gt;(); this.players = (Vector&lt;Player&gt;) in.readObject(); System.out.println("size" + players.size()); sleep(15); } else loop = false; } catch(Exception e){ e.printStackTrace(); socket.close(); } } } catch(Exception e){ e.printStackTrace(); } } } </code></pre> <p>Edit: Here is the server code:</p> <pre><code>import java.net.*; import java.util.Vector; import java.io.*; import javax.swing.*; import java.io.Serializable; public class SlickServer extends JFrame{ private static final long serialVersionUID = 1L; JTextArea textArea; JScrollPane scrollPane; public SlickServer(){ super("Test Online Server - by William Starkovich"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500, 100); setLocationRelativeTo(null); textArea = new JTextArea(); scrollPane = new JScrollPane(textArea); //getContentPane().add(textArea); getContentPane().add(scrollPane); } public static void main(String[] args) throws IOException { Vector&lt;Player&gt; player = new Vector&lt;Player&gt;(); SlickServer ss = new SlickServer(); ss.setVisible(true); ServerSocket serverSocket = new ServerSocket(4444); boolean listening = true; int playerID = 0; while(listening){ ss.textArea.append("Waiting to connect with player: " + playerID + "\n"); new ClientThread(serverSocket.accept(), player, playerID, ss.textArea).start(); playerID++; ss.textArea.append("Players: " + player.size() + "\n"); } serverSocket.close(); System.exit(0); } } class ClientThread extends Thread implements Runnable{ int playerID; Socket acceptedSocket; JTextArea textArea; Vector&lt;Player&gt; players; Player me; public ClientThread(Socket acceptedSocket, Vector&lt;Player&gt; players, int playerID, JTextArea textArea){ super("ClientThread"); this.acceptedSocket = acceptedSocket; this.players = players; players.add(new Player(50,50, playerID)); if(players != null) System.out.println("Not Null: " + players.size()); boolean b = false; for(int i = 0; i &lt; players.size(); i++){ if(!b){ if(players.get(i).id == playerID){ me = players.get(i); b = true; } } } this.playerID = playerID; this.textArea = textArea; } public void run(){ try{ Socket clientSocket = acceptedSocket; clientSocket.setTcpNoDelay(true); textArea.append("Accepted. Now creating I/O.\n"); DataInputStream in = new DataInputStream(clientSocket.getInputStream()); ObjectOutputStream out = new ObjectOutputStream(clientSocket.getOutputStream()); textArea.append("player connected. \n"); out.writeInt(me.id); out.writeObject(players); out.flush(); while(!clientSocket.isClosed() &amp;&amp; clientSocket.isConnected()){ me.x = in.readInt(); me.y = in.readInt(); if(players != null) System.out.println("Not Null: " + players.size()); textArea.append("PlayerID: " + playerID + " Players: " + players.size() + " me.x: " + me.x + " me.y: " + me.y + "\n"); out.writeObject(players); out.flush(); sleep(15); } } catch(Exception e){ e.printStackTrace(); System.exit(1); } } } class Player implements Serializable{ private static final long serialVersionUID = 1L; int x; int y; int id; public Player(int x, int y, int id){ this.x = x; this.y = y; this.id = id; } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload