Avatar billede razersedge Nybegynder
28. april 2003 - 16:27 Der er 10 kommentarer og
1 løsning

Socket Fejl

Hej java-folk.

Jeg er i øjeblikket i gang med mit første java applet, jeg har før arbejdet med C++,Delphi osv. Så jeg er ikke helt grøn på feltet.

Jeg er nu løbet ind i det problem at jeg får nogle ret sjove fejl når mit applet afvikles i en browser, dette er hvad jeg får af information ved afvikling:

ava.security.AccessControlException: access denied (java.net.SocketPermission 172.16.1.90:7640 connect,resolve)

    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:270)
    at java.security.AccessController.checkPermission(AccessController.java:401)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:542)
    at java.lang.SecurityManager.checkConnect(SecurityManager.java:1044)
    at java.net.Socket.connect(Socket.java:420)
    at java.net.Socket.connect(Socket.java:376)
    at java.net.Socket.<init>(Socket.java:291)
    at java.net.Socket.<init>(Socket.java:147)
    at QClient.init(QClient.java:46)
    at sun.applet.AppletPanel.run(AppletPanel.java:347)
    at java.lang.Thread.run(Thread.java:536)

Derefter står der i statusbaren: Applet QClient notinited.

Jeg får ingen fejl under kompileringen af mit applet, her er selve socket koden:
---------------------------------


try {
          InetAddress address = InetAddress.getByName("172.16.1.90");
          sock = new Socket(address,7640);
          try {

            BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
            sock.close();

          }
          catch (IOException IOex) { // getInputStream
            System.err.println("Noget galt med getInputStream.");
            System.err.println(IOex);
          }
        }
        catch (UnknownHostException UnHoEx) { // new Socket
              System.err.println("Kan ikke finde server");
              System.err.println(UnHoEx);
        }
        catch (ConnectException ex) { // new Socket
              System.err.println("Kan ikke forbinde til server");
              System.err.println("server kører muligvis ikke");
              System.err.println(ex);
        }
        catch (NoRouteToHostException ex) { // new Socket
              System.err.println("Kan ikke forbinde til server");
              System.err.println("firewall forhindrer muligvis forbindelse");
              System.err.println(ex);
        }
        catch (IOException IOex2) {  // new Socket
              System.err.println("Fejl ved skabelse af socket.");
              System.err.println(IOex2);
        }
Avatar billede arne_v Ekspert
28. april 2003 - 16:32 #1
En applet har normalt kun lov til at lave en socket connection til
den server som den er hentet fra.

Jeg formoder, at det er dit problem.
Avatar billede arne_v Ekspert
28. april 2003 - 16:33 #2
Den siger det også:

java.security.AccessControlException: access denied (java.net.SocketPermission 172.16.1.90:7640 connect,resolve)

appletten har ikke perssion til 172.16.1.90 !

Det er muligt at give en applet specielle priviligier på
en PC, men det er sjældent særligt praktisk til internet brug.
Avatar billede razersedge Nybegynder
28. april 2003 - 16:36 #3
dvs.. at hvis bare appletten ligger på den server som socket serveren også er på skulle der altså ikke være noget problem?

Prøver lige.
Avatar billede arne_v Ekspert
28. april 2003 - 16:43 #4
Det mener jeg burde virke.
Avatar billede razersedge Nybegynder
28. april 2003 - 16:57 #5
Det virkede fandme..
Avatar billede razersedge Nybegynder
28. april 2003 - 16:57 #6
tak skal du have.
Avatar billede razersedge Nybegynder
28. april 2003 - 20:27 #7
Hej igen, håber du lige vil svare på et lille spørgsmål.

Jeg har en tråd med en løkke som kun skal stå og tjekke for indkommene beskeder, den skal modtage, tjekke syntaxen, og skrive tilbage afhængigt af det indkomne data.

Det jeg har lige nu er som sådan:

in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
InputBuffer er en String.

while(true)
{
  InputBuffer = in.readline();
  //lave det den nu skal.

  out.write(strSend,0,strSend.length());
}

Mit problem er, at serveren af en eller anden grund aldrig modtager det der sendes tilbage. Jeg ved der er/har været kontakt, da den jo i første tilfælde har fået noget tilsendt, det er så dette som skal svares på. Svaret modtages ikke.

Kan du hjælpe mig her?
Skal du have flere point?
Avatar billede arne_v Ekspert
28. april 2003 - 20:52 #8
Muligvis.

Men jeg skal nok have lidt mere info om:
  - hvordan det skal bruges
  - hvordan ser koden i den anden ende ud

Måske endda mere om koden her.
Avatar billede razersedge Nybegynder
28. april 2003 - 20:58 #9
Hvordan det skal bruges?

Det er stort set sån, at når klienten (denne) connecter til serveren, modtager den en string bestående af "status 0" og endende med asciikoden 10.

Jeg bruger derfor noget streng manipulation til at analysere strengen og i dette tilfælde konstaterer jeg at der er tale om "status" med koden "0", nu skal klienten så svare tilbage på dette - det er her problemet kommer, for det klienten sender, bliver aldrig modtaget af serveren, jeg ved jeg kommer dertil hvor det skal afsendes, det har jeg debug'et mig frem til.

Hvordan koden i den anden ende ser ud? Sig til hvad du gerne vil se, så skal jeg smide det herind.

Mange tak.
Avatar billede arne_v Ekspert
28. april 2003 - 21:04 #10
Hm.

Det er svært at sige.

Har du prøvet med:

out.flush();

[efter out.write]

?
Avatar billede razersedge Nybegynder
28. april 2003 - 21:06 #11
Puha.. det var præcis hvad jeg skulle bruge, mange tak skal du have :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester