'Java Socket Programming MultiPlayer Kart Racing Game Shows Blank Screen

Basically I am developing a multiplayer kart racing game using TCP. There will be two clients and one server. The clients connected will be passed as a thread running. The first connected client will be assigned as player 1 and the later to be player 2.

The protocol that I have developed is: Player 1 sends its kart's information to server and server forwards it to Player 2. Player 2 then sends its kart's information to server and server forwards it to Player 1.

I am sending String like "KART1:X:200" over the network. However, when entire project runs, the two clients are successfully connected, but the jFrame shows nothing.

Below is my code for

Server:-

try
        {
            service = new ServerSocket(8888);
            System.out.println("Server has started.");
        }
        catch (IOException e)
        {
            System.out.println(e);
        }  

        try
        {
            while (connectedClient < 2)
            {
                server = service.accept();
                connectedClient++;
                BufferedReader reader = new BufferedReader(new InputStreamReader(server.getInputStream()));
                DataOutputStream writer = new DataOutputStream(server.getOutputStream());
                ClientThread clientThread = new ClientThread(server, String.valueOf(connectedClient), reader, writer);
                System.out.println("Player " + connectedClient + " connected. IP Address: " + server.getInetAddress());
                
                Thread thread = new Thread(clientThread);
                thread.start();
                System.out.println("Player: " + connectedClient + " thread running.");
            }
            
            System.out.println("Server is full.");
        }  
        catch (IOException e)
        {
            System.out.println(e);          
        }

ClientThread:-

@Override
    public void run() 
    {
        try
        {
            while (keepRunning == true)
            {
                if (reader.readLine() != null)
                {
                    String[] message = reader.readLine().split(":");
                    
                    if (message[0].equalsIgnoreCase("KART1"))
                    {
                        kartNum = message[0];
                        
                        if (message[1] == "INDEX")
                        {
                            kartNumIndex = message[2];
                            broadcastToPlayer2(kartNumIndex);
                        }
                        else if (message[1] == "X")
                        {
                            x = message[2];
                            broadcastToPlayer2(x);
                        }
                        else if (message[1] == "Y")
                        {
                            y = message[2];
                            broadcastToPlayer2(y);
                        }
                        else if (message[1] == "SPEED")
                        {
                            speed = message[2];
                            broadcastToPlayer2(speed);
                        }
                    }
                    else if (message[0].equalsIgnoreCase("KART2"))
                    {
                        kartNum = message[0];
                        
                        if (message[1] == "INDEX")
                        {
                            kartNumIndex = message[2];
                            broadcastToPlayer1(kartNumIndex);
                        }
                        else if (message[1] == "X")
                        {
                            x = message[2];
                            broadcastToPlayer1(x);
                        }
                        else if (message[1] == "Y")
                        {
                            y = message[2];
                            broadcastToPlayer1(y);
                        }
                        else if (message[1] == "SPEED")
                        {
                            speed = message[2];
                            broadcastToPlayer1(speed);
                        }
                    }
                }
            }
        }
        catch (IOException iOe)
        {
            iOe.printStackTrace();
        }
    }
    
    public void broadcastToPlayer1(String value)
    {
        try
        {
            clients.get(0).writer.writeBytes(value);
            clients.get(0).writer.writeBytes("\n");
            clients.get(0).writer.flush();
        }
        catch (IOException iOe)
        {
            iOe.printStackTrace();
        }
    }
    
    public void broadcastToPlayer2(String value)
    {
        try
        {
            clients.get(1).writer.writeBytes(value);
            clients.get(1).writer.writeBytes("\n");
            clients.get(1).writer.flush();
        }
        catch (IOException iOe)
        {
            iOe.printStackTrace();
        }
    }

RacingTrack (JPanel) that will get and send karts' information:-

if (playerNum == 1)
        {
            // send kart1 information
            try
            {
                writer.writeBytes("KART1:INDEX:" + kart1.getKartImageIndex());
                writer.writeBytes("\n");
                
                writer.writeBytes("KART1:X:" + kart1.getXCoordinate());
                writer.writeBytes("\n");
                
                writer.writeBytes("KART1:Y:" + kart1.getYCoordinate());
                writer.writeBytes("\n");
                
                writer.writeBytes("KART1:SPEED:" + kart1.getSpeed());
                writer.writeBytes("\n");
                
                writer.flush();
                
                kart1.draw(g, this);
            }
            catch (IOException iOe)
            {
                iOe.printStackTrace();
            }            
        }
        
        if (playerNum == 2)
        {           
            // get kart1 information
            try
            {               
                kartImageIndex = Integer.parseInt(reader.readLine());
                x = Integer.parseInt(reader.readLine());
                y = Integer.parseInt(reader.readLine());
                speed = Integer.parseInt(reader.readLine());
                
                kart1.setKartImageIndex(kartImageIndex);
                kart1.setXCoordinate(x);
                kart1.setYCoordinate(y);
                kart1.setSpeed(speed);
                
                kart1.draw(g, this);
            }
            catch (IOException iOe)
            {
                iOe.printStackTrace();
            }
            
            // send kart2 information
            try
            {
                writer.writeBytes("KART2:INDEX:" + kart2.getKartImageIndex());
                writer.writeBytes("\n");
                
                writer.writeBytes("KART2:X:" + kart2.getXCoordinate());
                writer.writeBytes("\n");
                
                writer.writeBytes("KART2:Y:" + kart2.getYCoordinate());
                writer.writeBytes("\n");
                
                writer.writeBytes("KART2:SPEED:" + kart2.getSpeed());
                writer.writeBytes("\n");
                
                writer.flush();
                
                kart2.draw(g, this);
            }
            catch (IOException iOe)
            {
                iOe.printStackTrace();
            }
        }
        
        if (playerNum == 1)
        {
            // get kart2 information
            try
            {              
                kartImageIndex = Integer.parseInt(reader.readLine());
                x = Integer.parseInt(reader.readLine());
                y = Integer.parseInt(reader.readLine());
                speed = Integer.parseInt(reader.readLine());
                
                kart2.setKartImageIndex(kartImageIndex);
                kart2.setXCoordinate(x);
                kart2.setYCoordinate(y);
                kart2.setSpeed(speed);
                
                kart2.draw(g, this);
            }
            catch (IOException iOe)
            {
                iOe.printStackTrace();
            }
        }

Please help :(



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source