Newsgroup: it.comp.lang.javascript
Titolo: Problemi java, javascript, liveconnect e socket

Salve a tutti, ho un problema che non sriesco a risolvere e dopo varie
ricerche non so piu cosa fare.
In ditta abbiamo in apparecchio elettronico usato per acquisire alcuni
dati in tempo reale. Tale apparecchio e' controllato da un software,
denominato VBSpecchio, sviluppato in vb6, scritto da noi alcuni anni
fa. 
Oggi si e' presentata l'esigenza di dovere fare leggere i dati
acquisiti da VBSpecchio da un browser internet. Il browser da noi
scelto e' stato Mozilla. Sia il Mozilla che VBSpecchio sono residenti
sullo stesso pc. La comunicazione tra Mozilla e VBSpecchio avviene
tramite socket: Mozilla instaura una connessione con VBSpecchio su
socket e VBSpecchio gli ritorna una risposta. Cio' e' stato possibile
creando una pagina html contenente un javascript che tramite
liveconnect fa uso delle libretrie java. 
Tutto ha funzionato fino a che la pagina html e' stata residente sul
client dove gira VBSpecchio, quando questa e' stata spostata sul
nostro server intranet si sono presentati alcuni problemi:
al momento in cui si utilizza l'oggetto socket per connettersi, lo
script si ferma perche' non si hanno i privilegi necessari.
Dopo varie ricerche sono venuto a conoscenza che le applet java devono
essere firmate per eseguire connessioni verso macchine che non siano
il server da cui essa e' stata scaricata. Faccio notare che la
procedura sviluppata non e' un'applet ma un semplice javascript,
comunque preso atto di cio', ho inserito nel file prefs.js di mozilla
le seguenti linee:
user_pref("signed.applets.codebase_principal_support", true);
user_pref("signed.applets.local_classes_have_30_powers", true);
user_pref("signed.applets.low_security_for_local_classes", true);
fatto questo lo script non ha presentato piu' il problema precedente,
ma comunque esso ancora non funziona perche'  non viene aperto il
socket.
Qui sotto riporto la funzione dello script incriminata:
function put_comando (comando,pezza) {
	var cont_err_out = 0;
	var cont_err_in	= 0;
	var max_err = 10;
	var var_break = false;
	pezza = pezza + "        ";
	pezza = pezza.substring(0,8);
	netscape.security.PrivilegeManager.enablePrivilege
('UniversalConnect');
	var host = '127.0.0.1';
	var port = 1001;
	// ciclo generale che ripete la connessione e la lettura della
risposta in caso di errori
	while (true)
	{
		// ciclo che ripete la connessione e l'invio del comando in caso
di errore
		while (true)
		{
			try {
				// apertura della connessione e invio del comando
				var sock = new java.net.Socket (host, port);
				dock = new
java.io.DataOutputStream(sock.getOutputStream());
				dock.writeBytes('vis' + comando + pezza + '\r\n');
				cont_err_out = 0;
				//var_break = true; //tolta perche' qui esce dal while
				break;
			}
			catch (e) {
				// alert (e);
				if ( ++cont_err_out >= max_err ) {
					cont_err_out = -1;
					break;
				}
			}
		}
		if ( cont_err_out == -1 )
			break;
		try {
			// lettura della risposta
			var dis = new java.io.DataInputStream(sock.getInputStream());
			var line = dis.readLine();
			// controllo della correttezza del dato di risposta
			if ( line.length() != 35 )
				cont_err_in++;
			else if ( line.substring(0,3) != "vis" )
				cont_err_in++;
			else if  ( line.substring(3,6) == "err")
				cont_err_in++;
			else if ( line.substring(6,14) != pezza )
				cont_err_in++;
			else {
				//alert (line);
			  	dis.close();
			    dock.close();
  				sock.close();
				break ;
			}
		}
		catch (e) {
			cont_err_in++;
			//break;
			//alert (e);
		}
		if ( cont_err_in >= max_err )
			break ;
	}
  	if ( cont_err_out == -1 || cont_err_in >= max_err )
  		return '';
  	else
  		return line;
}
Qualcuno mi sa dire come posso aggirare il problema.
Ciao a tutti.
David.



 Qualcuno mi sa dire come posso aggirare il problema.
Ho sempre evitato di utilizzare librerie java direttamente da js, quindi
non so aiutarti in tal senso. Posso solo proporti un paio di alternative:
a) L'uso di XML per la comunicazione tra la pagina html e il vostro
applicativo tramite XmlHttpRequest.
b) L'uso di XPCOM per la gestione dei socket:
http://www.xulplanet.com/references/xpcomref/group_Network.html
-- 
ZER0://coder.gfxer.web-designer/
~ Come devo regolare la stampante laser per stordire?
(How do I set a laser printer to stun?)


http://www.xulplanet.com/references/xpcomref/group_Network.html
sarei interessato a quest'iltimo, ma non ho nessuna esperinza, pui
consigliarmi qualche esempio ?
Ciao e grazie.
David.

consigliarmi qualche esempio ?
Il codice di Chatzilla, il client IRC di Mozilla, puo' essere un punto
di partenza per vedere come gestire i sockets.
'bye