Java-апплет связи UDP с сервером UDP - PullRequest
5 голосов
/ 20 мая 2011

Я работал над разными способами, чтобы сделать это в течение 2 полных дней кодирования, мне нужна помощь:

Я хочу создать многопользовательскую игру на Java онлайн. Для этого мне нужна связь между сервером и апплетом

У меня сложилось впечатление, что пока сервер UDP работает на той же машине, на которой размещен апплет, он будет работать. (возможно, мне нужно исправить это)

Я постоянно получаю эту ошибку на консоли ошибок (из апплета) java.security.AccessControlException: доступ запрещен (java.net.SocketPermission 127.0.0.1:5556 подключиться, разрешить)

При попытке получения сообщений на апплете ничего не происходит, ничего не отправляется и ничего не принимается (сервер udp отправляет сообщение, апплет не получает, я знаю, что udp отправляет правильно, так как я тестировал отдельно его с клиент)

Вот апплет 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);
    }
}

Вот файл HTML, с которым я запускаю апплет:

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

А вот сервер, которым я пользуюсь

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);
    } 
}

Я пытался следовать руководству здесь: http://corvstudios.com/tutorials/udpMultiplayer.php, чтобы создать этот код.

я действительно не хотел заканчивать тем, что использовал MINA, Tomcat или установил какую-либо сетевую среду - но если я должен сообщить мне, это сэкономит мне много времени

Любая помощь искренне приветствуется!

1 Ответ

1 голос
/ 26 мая 2011

JRE, используемая вашим апплетом, должна быть настроена для авторизации доступа файловой системы к вашему апплету. См. Политику или безопасность для апплета

...