Salve a tutti, sono abbastanza disperato perchè non trovo una soluzione e quindi andrò subito al dunque.. Sto facendo un piccolo giochino ma all'inizio c'è un menù di scelta dei personaggi. Qui avviene la connessione client/server e ogni volta che cambio personaggio nel client ad esempio spedisco un numero al server che mi disegnerà nella schermata del server il personaggio scelto dall'avversario e vice versa. Spedendo i dati dal KeyPressed (cioè ogni volta che si cambia un personaggio) il gioco si blocca un paio di secondi e poi spedisce i numeri, e non è esattamente quello che voglio dato che deve essere una cosa fluida spedire un intero.. -.-
Vi aggiungo il codice incriminato in caso vi sia utile..

CLASSE ChooseCharacter LATO SERVER (identica nel lato client)
codice:
public class ChooseCharacter extends Canvas implements MouseListener, KeyListener
{
    JFrame f;
    Image sfondo;
    Image[] p = new Image[4];
    ClientConnection c = new ClientConnection();
    int i, a;

    public ChooseCharacter(JFrame frame) 
    {
        f = frame;
        this.addMouseListener(this);
        this.addKeyListener(this);
        f.setTitle("Scelta Personaggio");
        sfondo = Toolkit.getDefaultToolkit().getImage("sceltaPersonaggio.jpg");
        sfondo = sfondo.getScaledInstance(f.getWidth(), f.getHeight(), Image.SCALE_DEFAULT);
        p[0] = Toolkit.getDefaultToolkit().getImage("p0.jpg");
        p[1] = Toolkit.getDefaultToolkit().getImage("p1.jpg");
        p[2] = Toolkit.getDefaultToolkit().getImage("p2.jpg");
        p[3] = Toolkit.getDefaultToolkit().getImage("p3.jpg");
        c.attendiClient();
        i = 0;
    }

    @Override
    public void paint(Graphics g)
    {
        g = (Graphics2D) g;
        g.drawImage(sfondo, -5, -35, this);
        g.drawImage(p[i], 50, 50, this);
        g.drawImage(p[a], 200, 50, this);
    }

    public void keyPressed(KeyEvent e)
    {
            if(e.getKeyCode() == KeyEvent.VK_UP)
               if(i == 3)
                   i=0;
               else
                   i++;
            if(e.getKeyCode() == KeyEvent.VK_DOWN)
                if (i==0)
                    i=3;
                else
                    i--;

        c.inviaDati(i);
        a = c.riceviDati();
        repaint();
    }
}
CLASSE ClientConnection (dal server mi connetto al client)
codice:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class ClientConnection
{
    ServerSocket server = null;
    Socket client = null;
    DataInputStream dis = null;
    DataOutputStream dos = null;

    public ClientConnection()
    {
    }

    public Socket attendiClient()
    {
        try
        {
            server = new ServerSocket(5000);
            client = server.accept();
            server.close();
            
            dis = new DataInputStream(new DataInputStream(client.getInputStream()));
            dos=new DataOutputStream(client.getOutputStream());
        }
        catch(Exception e)
        {
            System.out.println(e.getMessage());
            System.out.println("Errore durante la connessione");
            System.exit(1);
        }

        return client;
    }

    public int riceviDati()
    {
        try {
            System.out.print("" + dis.readInt()+'\n');
            return dis.readInt();
        } catch (IOException ex) {

        }
        System.out.print("Non sono dentro il try"+'\n');
        return 0;
    }

    public void inviaDati(int val)
    {
        try
        {
            dos.writeInt(val);
        }
        catch(IOException e){}
    }
}
CLASSE ServerConnection (lato client per la connessione verso il server)
codice:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class ServerConnection
{
    Socket client = null;
    DataInputStream dis = null;
    DataOutputStream dos = null;

    public ServerConnection()
    {
    }

    public void connetti()
    {
        try
        {
            client = new Socket("192.168.1.100", 5000);
            dis = new DataInputStream(client.getInputStream());
            dos = new DataOutputStream(client.getOutputStream());
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }

    public int riceviDati()
    {
        try {
            System.out.print("" + dis.readInt()+'\n');
            return dis.readInt();
        } catch (IOException ex) {

        }
        System.out.print("Non sono nel try"+'\n');
        return 0;
    }

    public void inviaDati(int val)
    {
        try {
            dos.writeInt(val);
        } catch (IOException ex) {
        }
    }
}
dovrebbe essere il minimo essenziale per scrivere se non sbaglio.. forse mi sono dimenticato qualcosa ma dovrebbe funzionare così.. Aiutatemi vi pregooo!!