Avatar billede ostekage Nybegynder
29. august 2001 - 13:51 Der er 9 kommentarer

client ken ikke connecte til server???

jeg har en lavet en simpel applet der skal kommunikere med en server, Serveren körer tilsyneladende fint, men appletten giver en melding (nederst i browseren):
exception: com.ms.security.SecurityExceptionEx[Cliet.start]: cannot access \"127.0.0.1\":5000

det virker som om at fejlen opstår i clientens start()-function under Try blocken:
connection=new Socket(InetAddress.getLocalHost(),5000);
hvor den pröver at etablere forbindelse med Serveren.
(både client og server körer på samme maskine)

source:

**********************************
CLIENT
**********************************
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

public class Client extends Applet implements Runnable
{
    private TextField id;
    private TextArea display;
    private char myMark;
   
    private Socket connection;
    private DataInputStream input;
    private DataOutputStream output;
    private Thread outputThread;
   
    public void init()
    {
        display = new TextArea(4,30);
        display.setEditable(false);
        add(display,BorderLayout.SOUTH);
       
        id=new TextField();
        id.setEditable(false);
        add(id,BorderLayout.CENTER);
    }
    public void start()
    {
       
        try
        {
            connection=new Socket(InetAddress.getLocalHost(),5000);
            input=new DataInputStream(connection.getInputStream());
            output=new DataOutputStream(connection.getOutputStream());
        }
        catch(IOException e)
        {
                e.printStackTrace();
        }
        outputThread=new Thread(this);
        outputThread.start();
    }
    public void run()
    {
        try
        {
            myMark=input.readChar();
            id.setText(\"ok....\"+myMark+\"\");
        }
        catch(IOException e)
        {
                e.printStackTrace();
        }
        while (true)
        {
            try
            {
                String s=input.readUTF();
                id.setText(\"ok....\"+s+\"\");
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }
        }
    }
    public void send()
    {
            try
            {
                output.writeInt(4);
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }
    }
}

**********************************
SERVER
**********************************
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

public class Server extends Frame
{
    private int ant;
    private TextArea output;
    private ServerSocket server;
    private Player players[];
   
   
    public Server()
    {
        ant=0;
       
        players = new Player[2];
        try
        {
            server = new ServerSocket(5000,2);
        }
        catch(IOException e)
        {
            e.printStackTrace();
            System.exit(1);
        }
        output = new TextArea();
        add(output,BorderLayout.CENTER);
        setSize(300,300);
        setVisible(true);
       
    }
   
    public void execute()
    {
        try
        {
           
            players[ant]=new Player(server.accept(),this,ant);
            players[ant].start();
        }
        catch(IOException e)
        {
            e.printStackTrace();
            System.exit(1);
        }
    }
    public void display(String s)
    {
        output.append(s + \"\\n\");
    }
    public static void main(String args[])
    {
        Server game=new Server();
        game.execute();
    }
}
class Player extends Thread
{
    private Socket connection;
    private DataInputStream input;
    private DataOutputStream output;
    private Server control;
    private int number;
    private char mark;
   
    public Player(Socket s,Server t,int num)
    {
        mark=\'M\';
        connection = s;
        try
        {
            input=new DataInputStream(connection.getInputStream());
            output=new DataOutputStream(connection.getOutputStream());
        }
        catch(IOException e)
        {
            e.printStackTrace();
            System.exit(1);
        }
    }
    public void run()
    {
        try
        {
            control.display(\"player  has connected\");
            output.writeChar(mark);
            output.writeUTF(\"Blah blah\");
           
        }
       
   
       
   
        catch(IOException e)
        {
            e.printStackTrace();
            System.exit(1);
        }
    }
}

Håber i kan hjälpe...

Avatar billede disky Nybegynder
29. august 2001 - 13:57 #1
er din applet signed ?

Applets må normalt ingen ting af sikkerhedsårsager,
Avatar billede ostekage Nybegynder
29. august 2001 - 14:04 #2
Signed?
undskyld min uvidenhed, men jeg er java-newbie, så du må lige forklare..
Avatar billede mickni33 Nybegynder
29. august 2001 - 15:11 #3
Prøv kum at skrive et argument i serveren sådan her fjern det ene tal

server = new ServerSocket(5000);
Avatar billede mickni33 Nybegynder
29. august 2001 - 15:11 #4
tror nok det er det der er i vejen
Avatar billede ostekage Nybegynder
29. august 2001 - 16:33 #5
damn det hjalp ikke, men hvad er en \'signed\' applet, og kan have noget med det at göre?
Avatar billede lbhansen Nybegynder
29. august 2001 - 19:12 #6
en Applet må kun lave en Connection til den server den kommer fra. Applets bliver kørt på klienten, og at bede klienten om at connecte til sig selv på port 5000 giver ikke rigtig nogen mening.

Problemet er sikkert, at localhost, giver sikkerhedsproblemer. Prøv at oprette forbindelsen på en anden måde.
fx new Socket(\"127.0.0.1\", 5000).
Denne burde også være en parameter til din Applet, så du altid kan styre hvor den skal connecte til
Avatar billede disky Nybegynder
30. august 2001 - 08:45 #7
en signed applet, er en forma for sikkerhedsgodkendelse til at den må mere end normalt.

Kig på www.javasoft.com
Avatar billede logical Nybegynder
30. august 2001 - 21:34 #8
Brug getCodeBase() til at få din url til din server, hvor du formodentlig har noget kørende på port 5000. Alt andet kræver lidt mere erfaring
Avatar billede kezzelski Nybegynder
01. september 2001 - 14:19 #9
Hvis din applet ikke skal kunne connecte til flere forskellige steder er det lettest bare at ligge enten html-siden der loader appletten, eller selve appletkoden på samme sted, som du gerne vil connecte til!
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