Salve a tutti, intanto ne approfitto per salutare tutti gli utenti.
Sono anni che leggo nel vostro sito articoli, guide, ecc... Sono sempre stati punti di partenza per i miei progetti, e per l'aiuto che mi avete dato vi ringrazio!
Dunque, vi spiego il mio problema..
Ho una rete di sensori collegata ad un pc che funge da basestation, sul quale gira un programma java in esecuzione che preleva i dati dai sensori e li indirizza su un socket.
Su un altro pc ho il client java in esecuzione che si connette al server e legge ed elabora i dati ricevuti.
Vorrei modificare la struttura ed avere questa situazione:
Anziché connettermi con il programma java dal client e visualizzarli a schermo, poter visualizzare i dati su un sito web; dunque collegarmi, immagino attraverso JS, al server in java, ricevere i dati e mostrarli su un sito web.
Purtroppo non so da dove partire.. Ho pensato che una soluzione possibile potrebbe essere quella di caricare il client java all'interno di javascript, ma è un'operazione un po' macchinosa e ci sarebbe troppa latenza, poiché i dati mi servono quasi in tempo reale.
D'altro canto leggevo sui WebSocket, ma non viene menzionato da nessuna parte come connettersi ad un server java.
vi posto il codice del server.java per completezza:
codice:
import java.net.*;
import java.io.*;
publicclass server implements Runnable {
public ServerSocket ss = null;
public Socket s = null;
public ObjectOutputStream OOS = null;
public BufferedReader br = null;
public Thread t = null;
public String str = null;
public server() throws IOException, ClassNotFoundException {
ss = new ServerSocket(9999);
System.out.println("In attesa di client...");
s = ss.accept();
System.out.println("** Un client si è connesso **");
System.out.println("IP: " + s.getInetAddress());
System.out.println("Porta: " + s.getPort());
String str = "";
OOS = new ObjectOutputStream(s.getOutputStream());
t = new Thread(this);
t.start();
}
public void run() {
while (s.isConnected()) {
try {
//La variabile str viene modificata dal codice dei sensori
System.out.println("Io: " + str);
OOS.writeObject(str);
OOS.flush();
}catch(IOException e) {
System.out.println("** Il client potrebbe essersi disconnesso! **");
}
}
}
public static void main(String[]Args) throws IOException, ClassNotFoundException {
new server();
}
}
e del client.java, i quali sono perfettamente funzionanti e che possono servire a qualcuno
(NB: è una comunicazione unidirezionale)
codice:
import java.net.*;
import java.io.*;
publicclass client implements Runnable {
public Socket s = null;
public ObjectInputStream OIS = null;
public BufferedReader br = null;
public Thread t = null;
public String str = "";
// ------------------------------------>
private String host;
public client(String host) throws IOException, ClassNotFoundException {
this.host=host;
s = new Socket(host, 9999);
System.out.println("** Sono connesso con il server **");
System.out.println("IP: " + s.getInetAddress());
System.out.println("Porta: " + s.getPort());
OIS = new ObjectInputStream(s.getInputStream());
br = new BufferedReader(new InputStreamReader(System.in));
t = new Thread(this);
t.start();
while (s.isConnected()) {
while ((str = (String) OIS.readObject()) != null) {
System.out.println("Server: " + str);
try {
t.sleep(200); }
catch (InterruptedException e ) {}
}
}
}
public void run() {
}
public static void main(String[]args) throws IOException, ClassNotFoundException {
String host=null;
if (args.length == 2) {
if (!args[0].equals("-h")) {
System.out.println("Uso: java client -h indirizzo");
System.exit(1);
} else {
host = args[1];
}
}
else if (args.length == 0){
host = "localhost";
}
else {
System.out.println("Uso: java client -h indirizzo");
System.exit(1);
}
new client(host);
}
}
Sapete consigliarmi come muovermi?
Vi ringrazio