2017-11-23 5 views
2
Ergebnis an den Server zurückschicken

Also versuche ich einen MultithreadServer zu schaffen, wo dies der Fall ist (versuchen, so einfach wie möglich zu erklären):Nachricht an Client senden und

  1. Ein Server und k-Clients.
    1. Der Server erstellt eine Liste mit n Zufallszahlen und verteilt diese gleichmäßig auf die k verbundenen Clients.
    2. Die Clients berechnen den Mittelwert ihrer zugeordneten Nummern und Rück diesen Wert an den Server
    3. Der Server wartet, bis alle Werte sind, und berechnet die Standardabweichung zwischen aller empfangenen Mittelwerte. Der Server schreibt die Durchschnittswerte aller Clients sowie die gesamte Standardabweichung auf dem Bildschirm
    4. Der Server wiederholt diesen Gesamtprozess einige Male mit verschiedenen Listen von Zufallszahlen.

Im Moment ist mein Client mit dem Server zu verbinden, nicht in der Lage. Ich bin sehr neu in Java, also bitte mit mir. Wie würde ich das berechnete Ergebnis an den Server zurücksenden?

MultiThreadServer:

import java.io.BufferedInputStream; 
import java.io.BufferedReader; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.ArrayList; 
import java.util.Random; 

public class MultiThreadServer { 

    public static double SendNumber; 
    public static int Delay = 500; 
    public static String ReceivedSum; 
    public static final int PORT = 2000; 

    public static void main(String[] args) throws IOException, InterruptedException { 
     ServerSocket s = new ServerSocket(PORT); 
     System.out.println("Server socket: " + s); 
     System.out.println("Server listening..."); 

     try { while(true) { 
      Socket socket = s.accept(); 
      // Blocks until a connection occurs: 
      System.out.println("Connection accepted."); 
      System.out.println("The new socket: " + socket); 

      DataInputStream din = new DataInputStream(socket.getInputStream()); 
      DataOutputStream dout = new DataOutputStream(socket.getOutputStream()); 
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 

      Client t = new Client(socket); 

      System.out.println("New thread started."); 
      System.out.println("The new thread: " + t); 
      Random r = new Random(); 
      for(int i=0;i<10;i++) { 
       SendNumber = r.nextDouble(); 
       dout.writeDouble(SendNumber); 
      } 
      Thread.sleep(Delay); 
      System.out.println("Client Sum is: " + din.read()); 
       } 

     } //catch, while, try 
     finally { s.close(); } 
     } //main 
    } //MultiServer 

Auftraggeber:

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.net.InetAddress; 
import java.net.Socket; 
import java.util.ArrayList; 
import java.util.Random; 
import javafx.application.Platform; 



class Client extends Thread{ 
    private PrintWriter out; 
    private BufferedReader in; 
    private Socket socket; 
    public static ArrayList<Double> Numbers = new ArrayList<Double>(); 
    public static ArrayList<Client> allClients = new ArrayList<Client>(); 
    public static double FinalClientSum; 


    public Client(Socket s) throws IOException { 
     socket = s; 
     in = new BufferedReader(
       new InputStreamReader(socket.getInputStream())); 
     out = new PrintWriter(
       new BufferedWriter(
         new OutputStreamWriter(socket.getOutputStream())), true); 

     String line; 
     while((line = in.readLine()) != null) { 
      Numbers.add((Double.parseDouble(line))); 
     } 
     synchronized(this) { 
      allClients.add(this); 
     } 

     start(); 
    } 

    public void run(){ 
      try { 

       DataInputStream din = new DataInputStream(socket.getInputStream()); 
       DataOutputStream dout = new DataOutputStream(socket.getOutputStream()); 

       BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
       for(int i = 0; i<Numbers.size();i++) { 
        FinalClientSum += Numbers.get(i); //calc sum 
       } 
       //send back the information to server. 
       dout.writeDouble(FinalClientSum); 

      }catch(Exception e) { 

      }finally { 
       try { socket.close(); } 
       catch(IOException e) { 
        System.out.println("Client thread " + ": Socket not closed!"); 
       } 
       synchronized(this) { 
        allClients.remove(allClients.indexOf(this)); 
       } 
     } 

    } 
} 
+0

Kann der Server wissen, wie viele Clients sich mit ihm verbinden? – utkarsh31

+0

@ utkarsh31 beliebige Menge. – Joel

Antwort

-1

Ihre Socket socket = s.accept(); innerhalb der while-Schleife kommen sollte.

+0

Kann immer noch nicht verbinden. – Joel

Verwandte Themen