Salve a tutti ho iniziato a vedere come fare aplicazioni client server e mi sono imbattuto in questo esercizio:
Si definisca una applicazione client server basata su socket. Il server deve poter rispondere contemporaneamente a più client.
Il server genera un unico valore intero positivo N, da usare per ogni client che si collega.
Quando si connette, il client genera casualmente un intero M.
Il client invia poi al server M stringhe: “stringa1”, “stringa2”,… “stringaM”.
La trasmissione è terminata inviando la stringa “BYE”.
Ogni volta che un client termina la trasmissione, il server scrive a video il numero di stringhe di lunghezza N ricevute finora da tutti i client.
Questo è quanto sono riuscito a fare (sono ancora alle prime armi) , ammesso che ciò che ho scritto abbia un minimo di senso , non riesco a capire come inviare le stringhe dal client al server e nella classe che estende Thread come ottenere queste stringhe di cui confronterò la lunghezza con N.
vi lascio il codice , grazie in anticipo per chi mi risponderà!
package clientEsame;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ClientEsame {
public static void main(String[] args) {
int M = (int) (Math.random() * 100) + 10;
int intR;
try (Socket server = new Socket("localhost", 3001);
DataOutputStream out = new DataOutputStream(server.getOutputStream());) {
Random r = new Random();
for (int i = 0; i < M; i++) {
//invio stringhe
// out.writeInt(intR);
// out.flush();
}
out.writeInt(0);//la trasmissione termina inviando la stringa bye
out.flush();
} catch (IOException ex) {
Logger.getLogger(ClientEsame.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package serveresame;
import java.io.BufferedReader;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Marco
*/
public class ServerEsame {
private static final int PORTA=3001;
static int N = (int) (Math.random() * 100) + 10;
/*
* @param args the command line arguments
*/
public static void main(String[] args) {
ServerSocket server;
try {
server = new ServerSocket(9999);
//System.out.println("Server creato, in attesa di un client");
while (true) {
//System.out.println("In attesa di un client");
Socket s = server.accept();
//System.out.println("Client collegato");
ThreadEsame t = new ThreadEsame(s, N);
t.start();
}
} catch (IOException ex) {
Logger.getLogger(ServerEsame.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
package serverEsame;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ThreadEsame extends Thread {
Socket client;
Stringhe v;
public ThreadEsame(Socket client, Stringhe v) {
this.client = client;
this.v = v;
}
@Override
public void run() {
int letto;
try (DataInputStream in = new DataInputStream(client.getInputStream());) {
while ( ) { //la lettura non termina finche non compare BYE
//devo scrivere a video se il numero di stringhe di lungh N ricevute
}
} catch (IOException ex) {
Logger.getLogger(ThreadEsame.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if (client != null) {
try {
client.close();
} catch (IOException ex) {
Logger.getLogger(ThreadEsame.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package serveresame;
/**
*
* @author Marco
*/
public class Stringhe{
private String s;
public Stringhe(String s){
this.s=s;
int acc=0;
if(ServerEsame.N== s.length()){
acc++;
System.out.println("Ci sono"+acc+"stringhe di lunghezza"+ServerEsame.N);
}
}
}