Witam
Potrzebuję stworzyć aplikację gdzie będzie serwer oraz 2 klasy klientów (producenci i konsumenci - w teorii nieograniczona liczba tych i tych).
Będą również potrzebne 2 zmienne: produkcja i konsumpcja.
Mój problem polega na tym, że nie mam pojęcia jak odróżnić klientówProducentów od klientówKonsumentów na serwerze, tak aby wpisana produkcja/konumpcja przez tych klientów mogła być przypisana do danej zmiennej produkcja lub konsumpcja (wpisana przez klientów produkcja/konsumpcja ma się sumować na serwerze do danej zmiennej)
Mam nadzieję że jest zrozumiałe o co mi chodzi.
Na razie mam coś takiego:
Klasa ServerCommunicationThread
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class ServerCommunicationThread extends Thread{
private Socket clientSocket;
public ServerCommunicationThread(Socket clientSocket)
{
this.clientSocket = clientSocket;
}
int produckja =0;
int konsumpcja =0;
@Override
public void run() {
// TODO Auto-generated method stub
try {
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
System.out.println("SERVER: IN and OUT streams opened. Starting receiving data...");
out.println("Witamy na serwerze.");
out.flush();
String inputLine;
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
while ((inputLine = in.readLine()) != null) {
if (inputLine.equals("koniec"))
break;
else if (inputLine.equals("Producent")){
out.println("Podaj wielkosc/czestotliwosc PRODUKCJI");
}
else if (inputLine.equals("Konsument")){
out.println("Podaj wielkosc/czestotliwosc KONSUMPCJI");
}
}
System.out.println("SERVER: Ending sequence received. Closing streams and sockets.");
out.close();
in.close();
clientSocket.close();
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
}
}
Klasa Server
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
while (true)
{
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(4444);
} catch (IOException e) {
System.err.println("SERVER: Could not listen on port: 4444, " + e);
System.exit(1);
}
System.out.println("SERVER: Server connection opened on port 4444.");
Socket clientSocket = null;
try {
// after this method server stops and waits for new client connection
clientSocket = serverSocket.accept();
serverSocket.close();
} catch (IOException e) {
System.err.println("SERVER: Accept failed: 4444, " + e);
System.exit(1);
}
System.out.println("SERVER: Accepted client connecion on port 4444.");
ServerCommunicationThread thread = new ServerCommunicationThread(clientSocket);
thread.start();
}
}
}
Klasa Producer
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Producer {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 4444);
System.out.println("CLIENT: Server connected on port 4444");
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("CLIENT: IN and OUT streams opened. Starting sending data...");
String producentInput, serverResponse;
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
while ((serverResponse = in.readLine()) != null) {
if(serverResponse.equals("Witamy na serwerze.")){
producentInput = "Producent";
out.println(producentInput);
out.flush();
}
else {
System.out.println("Server: " +serverResponse);
System.out.print("Producent: ");
producentInput = console.readLine();
out.println(producentInput);
out.flush();
if (producentInput.equals("koniec")) {
break;
}
}
}
System.out.println("CLIENT: Ending server connection. Closing client streams and socket.");
out.close();
in.close();
socket.close();
System.exit(0);
} catch (UnknownHostException e) {
System.err.println("CLIENT: Trying to connect to unknown host: " + e);
System.exit(1);
} catch (Exception e) {
System.err.println("CLIENT: Exception: " + e);
System.exit(1);
}
}
}
Klasa Consumer
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Consumer {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 4444);
System.out.println("CLIENT: Server connected on port 4444");
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("CLIENT: IN and OUT streams opened. Starting sending data...");
String klientInput="Konsument";
String serverResponse;
int test = 0;
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
while ((serverResponse = in.readLine()) != null) {
if(serverResponse.equals("Witamy na serwerze.")){
klientInput = "Konsument";
out.println(klientInput);
out.flush();
}
else {
System.out.println("Server: " +serverResponse);
System.out.print("Klient: ");
klientInput = console.readLine();
out.println(klientInput);
out.flush();
if (klientInput.equals("koniec")) {
break;
}
}
}
System.out.println("CLIENT: Ending server connection. Closing client streams and socket.");
out.close();
in.close();
socket.close();
System.exit(0);
} catch (UnknownHostException e) {
System.err.println("CLIENT: Trying to connect to unknown host: " + e);
System.exit(1);
} catch (Exception e) {
System.err.println("CLIENT: Exception: " + e);
System.exit(1);
}
}
}