Newsgroup: it.comp.java
Titolo: Applet che non si connette!

Ho scritto una chat. Giungo subito al dunque: sotto Netscape, gira sotto
explorer no. Viene generato un eccezione di sicurezza
"com.ms.security.SecurityExceptionEx[chat$port_scanning.run]: cannot access
"127.0.0.1":5
e più in generale non permette nessuna connessione in nessun protocollo.
Provata e riprovata su altri 5 computer e testata anche in internet, stesso
risultato: explorer no, netscape si. Qualcuno mi dice come risolvere il
problema?

 "127.0.0.1":5
Io ho avuto un problema simile.
Se tu ad un certo punto provi a farti restituire l'indirizzo della macchina
sulla quale stai facendo girare l'applet hai quel problema.
Se non ti fai restituire quell'informazione non dovresti più avere quel tipo
di problema.
In particolare veniva sollevata l'eccezione alla chiamata del metodo del
socket  getInetAddress().getHostAddress()
L'alternativa che hai è quella di inserire il tutto in un blocco try...catch
che gestisce proprio quella eccezione.
Ciao
Jolly

 ha scritto nel messaggio
news:9cr93c$2q0$1...@news.mclink.it...

Ti invio il codice di un semplice portscanner da me scritto che subisce la
stessa eccezione: dimmi dove sbaglio!!
Sentiti ringraziamenti, Padreterno.
import java.applet.Applet;
import java.io.*;
import java.net.*;
import java.util.StringTokenizer;
import java.io.IOException;
import java.awt.*;
import java.awt.event.*;
import java.security.*;
public class PortScanner extends Applet {
 public InetAddress INDIRIZZO_SERVER;
 public int PORTA_SERVER;
 public String indirizzo_server;
 public Socket socket;
 public int free;
 public port_scanning ps;
 public TextArea ta;
 public Label eti1,eti2;
 public Button avvia;
 public TextField min,max;
 public Panel pannello;
 public void init() {
  eti1=new Label("porta di partenza");
  eti2=new Label("porta di arrivo");
  ta=new TextArea();
  avvia=new Button("Avvia scansione");
  avvia.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    exegui();
   }
  });
  pannello=new Panel();
  min=new TextField();
  max=new TextField();
  pannello.setLayout(new GridLayout(3,2));
  setLayout(new BorderLayout());
  add(ta,BorderLayout.CENTER);
  add(pannello,BorderLayout.SOUTH);
  pannello.add(eti2);
  pannello.add(max);
  pannello.add(eti1);
  pannello.add(min);
  pannello.add(avvia);
  free=-1;
  indirizzo_server="127.0.0.1";
  try {
   INDIRIZZO_SERVER=InetAddress.getByName(indirizzo_server);
   PORTA_SERVER=30000;
   System.out.println("Avviata creazione di threads...");
  }catch(IOException ex) {
   System.out.println("Si sono verificate le seguenti eccezioni: ");
   ex.printStackTrace();
  }
 }//end init
 public void exegui() {
  int imin=new Integer(min.getText()).intValue();
  int imax=new Integer(max.getText()).intValue();
  for (int i=imin;i<imax;i++) {
   ps=new port_scanning(i);
  }
 }
 class port_scanning extends Thread {
  private int porta;
  public port_scanning(int p) {
   porta=p;
   System.out.println("Creato thread per porta: "+porta);
   start();
  }//end costruttore
  public void run() {
   try {
    INDIRIZZO_SERVER=InetAddress.getByName(indirizzo_server);
    socket=new Socket(INDIRIZZO_SERVER,porta);
    System.out.println("Creata la connessione con la porta: "+porta);
    ta.appendText("\nPORTA "+porta+" accessibile");
    free=porta;
    finalize();
   }catch(IOException ex) {
    //ta.append("\nporta: "+porta+" non accessibile");
   }catch (SecurityException se){
    ta.append("\nEccezione di sicurezza su porta "+porta);
   }catch(Throwable exc) {
   }
  }//end run
 }//end portScanning
}//end applet
file html:
<HTML>
     <title>Chat</title>
     <applet code="PortScanner"
   width=320 height=300>
     </applet>
     </HTML>
file server:
import java.io.*;
import java.io.IOException;
import java.net.*;
public class mtserver {
 public int PORTA_SERVER;
 public String indirizzo_server;
 public ServerSocket server_socket;
 public Socket socket;
 public static void main(String[] args) {
  mtserver app=new mtserver();
 }//end main
 public mtserver() {
  try {
   System.out.println("Server avviato...");
   server_socket=new ServerSocket(30000);
   socket=server_socket.accept();
   System.out.println("Accettata una connessione");
  }catch(Exception ex) {
   System.out.println("Si sono verificate le seguenti eccezioni: ");
   ex.printStackTrace();
  }
 }//end costruttore
}//end server

    INDIRIZZO_SERVER=InetAddress.getByName(indirizzo_server);
Cosě a occhio mi sembra che questa istruzione potrebbe darti un problema, il
metodo "getByName(indirizzo_server)"
accetta la stringa del nome host (ad esempio "NomeServer") e ti restituisce
un oggetto inetAddress, perchč non provi
a sostituire "127.0.0.1" con il nome della macchina alla quale ti colleghi.
Tieni presente che la classe InetAddress č soggetta a restrizioni di
sicurezza quando č usata da un browser.
Jolly

 ha scritto nel messaggio
news:9ctn62$nkm$1...@news.mclink.it...

Non funziona, ho appena provato!!! L'eccezione mi viene generata dalla linea
di codice che crea la connessione:
socket=new Socket(INDIRIZZO_SERVER,porta);
Son disperato, che fare?

> Son disperato, che fare?
Prova a dare un'occhiata alle FAQ ... cerca i problemi di sicurezza!



 ha scritto nel messaggio news:...


 Son disperato, che fare?
Hai provato a cambiare costruttore del socket, io ho utilizzato come
argomento il nome Host (come stringa) e la porta
tieni presente che una delle violazioni di sicurezza che non puoi fare e di
accedere ad un host diverso da quello da dove ti colleghi con il browser che
contiene l'applet.
PS hai provato a fare la stessa cosa tramite applicazione,senza l'applet.
jolly

EHM...
ho preso il tuo codice ed ho compilato il tutto...tra l'altro se usi
il jdk1.3 viene segnalato un metodo deprecato.
Comunque ho fatto funzionare la tua applet sotto ie5 (senza cambiare codice)
ed ho visto che non ho problemi, sia passando tramite IIS che direttamente
caricando la pagina html.
Magari dammi qualche indicazione in più

 ha scritto nel messaggio
news:9cu7pi$t35$1...@news.mclink.it...

NOOOOOOOOOOO!!!!!!
Cavolo, questa non me l'aspettavo!! L'ho provato su altri computer e non è
andata neanche lì!! Ma che cosa può essere? Io uso il jdk1.2, ma non posso
credere che stia in questo il problema. Toricamente se a te gira il
portscanner, allora gira anche la chat. Davvero, non ti è comparsa neanche
una piccola eccezione? Ti ha trovato anche la porta 30000 quella che apriva
il server? Vedi, quando ho fatto la chat, l'ho portata al mio cliente (un
provider bergamasco) e l'abbiamo provata su explorer da windows2000 e non è
andato niente, generando la stessa identica eccezione che a me dava sul mio
computer a casa. Inutile dirti la figura di.... che c'ho fatto!! Anche se da
netscape va tutto senza rogne, il mio cliente, la vuole da explorer. E io
ora che cosa gli racconto?

 una piccola eccezione? Ti ha trovato anche la porta 30000 quella che
apriva
Si ho trovato anche quella porta (l'unica alla quale mi posso connettere) se
il server è attivo.
Tra l'altro non credo che il server che mi hai dato sia proprio quello che
usi visto che dopo
che viene accettata la connessione esce.
Perchè non mi posti lo stackTrace che ti dà l'eccezione?

 ha scritto nel messaggio
news:9cugu1$4f8$1...@news.mclink.it...

Eccolo qua!
com.ms.security.SecurityExceptionEx[PortScanner.init]: cannot access
"localhost"
 at com/ms/security/permissions/NetIOPermission.check
 at com/ms/security/PolicyEngine.deepCheck
 at com/ms/security/PolicyEngine.checkPermission
 at com/ms/security/StandardSecurityManager.chk
 at com/ms/security/StandardSecurityManager.chkex
 at com/ms/security/StandardSecurityManager.checkConnect
 at java/net/InetAddress.getAllByName0
 at java/net/InetAddress.getByName
 at PortScanner.init
 at com/ms/applet/AppletPanel.securedCall0
 at com/ms/applet/AppletPanel.securedCall
 at com/ms/applet/AppletPanel.processSentEvent
 at com/ms/applet/AppletPanel.processSentEvent
 at com/ms/applet/AppletPanel.run
 at java/lang/Thread.run
E' troppo un eccezione infame!!

Ho inserito un paio di commenti laddove ci sono i punti critici (sono 2),
prova a fare
le modifiche che ti ho postato e fammi sapere.
Giusto per curiosità. Io il codice l'ho compilato in un package, magare
prova a fare anche tu la stessa cosa
ma ormai sto arrampicandomi sugli specchi!!!
Ciao
Jolly



 public void init() {



  try {
   //jolly: commento.
   //INDIRIZZO_SERVER=InetAddress.getByName(indirizzo_server);
   PORTA_SERVER=30000;
   System.out.println("Avviata creazione di threads...");
  }catch(IOException ex) {
   System.out.println("Si sono verificate le seguenti eccezioni: ");
   ex.printStackTrace();
  }
 }//end init
 public void exegui() {
  int imin=new Integer(min.getText()).intValue();
  int imax=new Integer(max.getText()).intValue();
  System.out.println("Exegui"+imin+";"+imax);
  for (int i=imin;i<imax;i++) {
    System.out.println("Exegui "+i);
    ps=new port_scanning(i);
  }
 }
 class port_scanning extends Thread {
  private int porta;
  public port_scanning(int p) {
   porta=p;
   System.out.println("Creato thread per porta: "+porta);
   start();
  }//end costruttore
  public void run() {
   try {
    //INDIRIZZO_SERVER=InetAddress.getByName(indirizzo_server);
    //socket=new Socket(INDIRIZZO_SERVER,porta);
    /*jolly: usa direttamente il nome della macchina server, ad esempio
"mioserver"
   inoltre commenta la parte che cerca di prendere il nome del server*/
   String NomeHost="mioserver"
   socket=new Socket(NomeHost,porta);
    System.out.println("Creata la connessione con la porta: "+porta);
    ta.appendText("\nPORTA "+porta+" accessibile");
    free=porta;
    finalize();
   }catch(IOException ex) {



Ti ringrazio Jolly, sei quello che si sta sbattendo di più per aiutarmi!
Proverò a compilare con le tue modifiche, anche se sinceramente mi sembra
che non siano sostanzialmente diverse dalle mie giusto? Effettivamente mi
conviene chiamare subito il server col nome, ma dubito che questo faccia una
grande differenza rispetto a chiamarlo passandogli l'indirizzo nel formato
x.y.z.w (non mi ricordo come si chiama quando esprimi un indirizzo in questa
forma!) Proverò anche con il package. Ti farò sapere presto e grazie ancora!



Test