2017-04-19 2 views
0

Ich habe ein paar Tutorials gelesen und herausgefunden, wie Sie Threads für Multithreading-Socket-Server verwenden können. Ich habe eine Server-Klasse mit der ClientServiceThread-Klasse für Clients erstellt. Wenn der Thread eine Nachricht vom Client erhält, wie kann ich mit der Server-Klasse auf diese Informationen zugreifen?So verwenden Sie Daten von Clienthandler-Threads in Java

Hier ist mein Server Thema:

public void run(){ 
     game = new Game(); 
     try{ 
      serverSocket = new ServerSocket(port); 
      System.out.println("Server Started"); 
     } 
     catch (IOException e){ 
      System.out.println(e); 
     } 

     while(true) { 
      try { 
       Socket clientSocket = serverSocket.accept(); 
       ClientServiceThread cliThread = new ClientServiceThread(clientSocket); 
       threads.add(cliThread); 
       cliThread.start(); 
      } catch(IOException e) { 
       e.printStackTrace(); 

      } 
     } 


    } 

Hier ist meine ClientServiceThread Klasse:

public void run() { 
     boolean m_bRunThread = true; 
     System.out.println("Accepted Client Address - " + socket.getInetAddress().getHostAddress()); 
     try { 
      out = new ObjectOutputStream(socket.getOutputStream()); 
      in = new ObjectInputStream(socket.getInputStream()); 

      while(m_bRunThread) { 
       String clientCommand = in.readUTF(); 
       System.out.println("Client Says :" + clientCommand); 

       if(!gameStarted) { 
        out.writeUTF("GAME_ALREADY_STARTED"); 
        out.flush(); 
       } 
      } 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

EDIT 1: Im Grunde bin ich auf den Client-Handler-Threads auf Befehle/Nachrichten abhören. Ich möchte sie später auf meinem Server bearbeiten, damit ich mein Game-Objekt damit manipulieren kann.

+0

Können Sie genauer angeben, was Sie von ClientServiceThread an Server zurückgeben möchten? –

+0

Ich möchte Nachrichten von den Clients erhalten und sie später für das von mir erstellte Spielobjekt verarbeiten. –

Antwort

0

Der Ansatz, den ich empfehlen würde, ist, das Spielobjekt an die Client-Threads zu übergeben (es muss threadsicher sein!), Und dann die Client-Threads die Aktionen auf dem Spielobjekt direkt ausführen lassen. Dies vereinfacht die Serverklasse und gibt Ihnen einen einzigen Ort für die Verarbeitung eingehender Nachrichten.

+0

Wie würde man es richtig fadensicher machen? –

+0

Und wenn ich das täte, wie könnte ich global Nachrichten an ALLE Clients senden? –

Verwandte Themen