Salve a tutti, come progetto universitario devo fare un gioco multiplayer sincrono in Java, dopo essermi letto un libro che parlava di come funziona la parte reti di java ho iniziato a fare degli esperimenti per fare un po' di pratica.

Ieri notte ho tentato di fare due client scritti in processing che si scambiassero dati in continuazione fra di loro connettendosi entrambi in un server scritto da me, per il momento non ho ancora implementato la parte in cui i client scambiano dati fra loro, al momento quando uno si connette il server gli invia di continuo la stringa "in attesa di giocatore 2".

La connessione avviene e la stringa arriva di continuo ma purtroppo arriva in maniera abbastanza randomica, per farvi capire cosa intendo:

di giocatore 2
re 2
ttesa di giocatore 2
ocatore 2
di giocatore 2
e 2
Queste sono alcune delle stringhe che mi arrivano, ho provato poi a far collegare un mio amico da casa sua e pare che la situazione sia migliore, come se la velocità di connessione fosse il problema principale, però è comunque poco affidabile la cosa.

L'unica idea che mi viene in mente è di mettere un carattere speciale a inizio stringa, ma sono sicuro che ci siano soluzioni migliori e che probabilmente il mio errore è una nabbata da principiante, questo è il codice lato server(ancora in fase di lavorazione):

codice:
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


public class ProvaServerGioco {
    public final static int PORT = 31946 ;
    private Socket player1;
    private Socket player2;
    
    
    public void start() throws UnknownHostException {
        ExecutorService pool = Executors.newFixedThreadPool(50);
    
        InetAddress addr = InetAddress.getByName("25.166.111.50");
        try (ServerSocket server = new ServerSocket(PORT, 0, addr)) {
            while (true) {
                try  {
                    if(player1==null)
                    {
                        player1= server.accept();/*
                        if(player1==null)
                            continue;*/
                        System.out.println("dio");
                    }
                
                    Writer out = new OutputStreamWriter(
                            player1.getOutputStream());
                    
                    out.write("in attesa di giocatore 2"+"\r\n"+";");
                    out.flush();
                    //out.close();
                }
                    catch (IOException ex) {
                        player1=null;
                    }
                }
            } catch (IOException ex) {
                System.err.println(ex);
                
            }
        
    }
    public static void main(String[] args) 
    {
        ProvaServerGioco server=new ProvaServerGioco();
        try {
            server.start();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }

    }

}
Questo invece è il client (vi ricordo che l'ho fatto con processing):

codice:
import java.net.*;
import java.io.*;
StringBuilder mouse;
final static int PORTA=31946;
//final static int PORTA=13;
String mouseStringa;
String hamachiIP="25.166.111.50";
Socket socket;
void setup()
{
  
  size(800,800);
  try{
  socket = new Socket("25.166.111.50", PORTA);
  socket.setSoTimeout(15000);
  InputStream in = socket.getInputStream();
  mouse = new StringBuilder();
  InputStreamReader reader = new InputStreamReader(in, "ASCII");
  for (int c = reader.read(); c != -1&&c!=59; c = reader.read()) {
    println(c);
        mouse.append((char) c);
      }
      mouseStringa=mouse.toString();
  }
  catch (IOException ex) 
  {
      System.err.println(ex);
  }
  }
  
  void draw()
  {
    background(255);

println(mouseStringa);
try{
      InputStream in = socket.getInputStream();
  mouse = new StringBuilder();
  InputStreamReader reader = new InputStreamReader(in, "ASCII");
  for (int c = reader.read(); c != -1&&c!=59; c = reader.read()) {

        mouse.append((char) c);
      }
      mouseStringa=mouse.toString();
  }
  catch (IOException ex) 
  {
      System.err.println(ex);
  }

    
    frame.setTitle("fps: "+frameRate);

    }
Grazie a tutti!