Я работал над разными способами, чтобы сделать это в течение 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 или установил какую-либо сетевую среду - но если я должен сообщить мне, это сэкономит мне много времени
Любая помощь искренне приветствуется!