2011-05-20 24 views
5

He estado trabajando en diferentes maneras de hacer esto durante 2 días completos de codificación, necesito un poco de ayuda:Java applet para la comunicación UDP UDP Servidor

Quiero crear un juego multijugador en línea en Java. Para hacer esto, necesito comunicación entre el servidor y el applet

Tenía la impresión de que, mientras el servidor UDP se ejecute en la misma máquina en la que se aloja el applet, funcionaría. (Tal vez tengo que ser corregido en eso)

continuamente me sale este error en la consola de errores (de aplicación) java.security.AccessControlException: Acceso denegado (java.net.SocketPermission 127.0.0.1:5556 conectar, resuelvo)

Al intentar recibir mensajes en el applet, no pasa nada, no se envía nada y no se recibe nada (el servidor udp está enviando un mensaje, el applet no está recibiendo, sé que el udp está enviando correctamente ya que lo probé por separado con un cliente)

Aquí está el applet UDPclient.java:

``

import java.io.*; 
import java.net.*; 
import java.applet.*; 
public class UDPClient extends Applet 
{ 
    protected DatagramSocket socket = null; 
    protected DatagramPacket packet = null; 
    String ipAddress; 
    public void init() 
    { 
     try{ 
     System.out.println("got username"); 
     String username = getParameter("username"); 
     System.out.println("got ip"); 
     ipAddress = getParameter("ip"); 
     System.out.println("makingsocket"); 
     socket = new DatagramSocket(); 
     System.out.println("sending packet"); 
     sendPacket(); 
     System.out.println("receiving packet"); 
     receivePacket(); 
     System.out.println("closing socket"); 
      socket.close(); 
     }catch(Exception e){e.printStackTrace();} 
    } 
    public void sendPacket() throws IOException 
    { 
     byte[] buf ="hihihi".getBytes(); // send hihihi 
     InetAddress address = InetAddress.getByName(ipAddress); 
     packet = new DatagramPacket(buf, buf.length, address, 5556); 
     System.out.println("sending packet"); 
    socket.send(packet); 
     int port = packet.getPort(); 

    } 
    public void receivePacket() throws IOException 
    { 
     byte[] buf = new byte[256]; 
      packet = new DatagramPacket(buf, buf.length); 
     System.out.println("getting packet--- calling socket.receive"); 
      socket.receive(packet); 
     System.out.println("got here, receiving packet"); 
      String modifiedSentence =new String(packet.getData()); 
      System.out.println("FROM SERVER:" + modifiedSentence); 
    } 
} 

Aquí está el archivo HTML i ejecutar el applet con:

<applet code="UDPClient.class" width="640" height="480"> 
<param name="username" value="Guest"> 
<param name="ip" value="localhost"> 
</applet> 

Y aquí está el servidor que estoy usando

import java.io.*; 
import java.net.*; 
public class multiTest 
{ 
    static protected DatagramSocket socket = null; 
    static protected DatagramPacket packet = null; 
    public static void main(String [] args) throws IOException 
    { 
     socket = new DatagramSocket(5556); 
     while(true) 
     { 
      receivePacket();    
      sendPacket();   


     } 
    } 
    public static void receivePacket() throws IOException 
    { 
     //receive message from client 
     byte[] buf = new byte[256]; 
     packet = new DatagramPacket(buf, buf.length); 
     socket.receive(packet); 

     //translate message in a thread 
     String message = new String(packet.getData(), 0, packet.getLength()); 
     System.out.println("received" + message); 
    // should really make thread; 
    } 
    public static void sendPacket() throws IOException 
    { 

     byte[] buf = "ack".getBytes(); 
     //send the message to the client to the given address and port 
      InetAddress address = packet.getAddress(); 
     int port = packet.getPort(); 
     packet = new DatagramPacket(buf, buf.length, address, port); 
     socket.send(packet); 
    } 
} 

He estado tratando de seguir el tutorial aquí: http: //corvstudios.com/tutorials/udpMultiplayer.php para crear este código.

Quiero realmente no tiene que terminar usando MINA, Tomcat o instalar ningún marco de la red - pero si tengo que hacerme saber, que va a salvarme mucho tiempo

Cualquier ayuda se agradece sinceramente ¡avanzado!

+0

¿La dirección del servidor está vinculada a 127.0.0.0? Recuerde las restricciones de applet que los applets sin firmar solo pueden acceder al host desde el que se cargaron. –

+0

@Jochen: Sospecho que si bien el applet y el objetivo están en la misma * máquina, * el JRE no los considera procedentes del mismo * servidor. * (Supongo que es a dónde ibas con eso.) @OP ¿Cuál es la dirección en la barra de direcciones del navegador cuando se visita el applet? El servidor –

+0

está usando localhost. cuando visito el applet estoy usando el sistema de archivos, así que para mí se ve así: file: ///home/freelan/asdf16ino/explorer/index3.html (estoy usando ubuntu) – user761996

Respuesta

1

El JRE utilizado por su applet debe configurarse para autorizar el acceso del sistema de archivos a su applet. Consulte la política o la seguridad para el applet