简体   繁体   English

Java UDP通信小程序到UDP服务器

[英]Java UDP communication applet to UDP Server

I've been working on different ways to do this for 2 full coding days, i need some help: 我已经在不同的方法上工作了2个完整的编码日,我需要一些帮助:

I want to create a multiplayer game in java online. 我想用java在线创建一个多人游戏。 To do this i need communication between the server and the applet 为此,我需要服务器和applet之间的通信

I was under the impression that as long as the UDP server is being ran on the same machine the applet is being hosted on, it would work. 我的印象是,只要UDP服务器在托管applet的同一台机器上运行,它就可以工作。 (perhaps i need to be corrected on that) (也许我需要纠正)

I continually get this error on the error console (from applet) java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:5556 connect,resolve) 我在错误控制台(来自applet)上不断收到此错误java.security.AccessControlException:访问被拒绝(java.net.SocketPermission 127.0.0.1:5556 connect,resolve)

When trying to receive messages on the applet, nothing happens, nothing is sent and nothing is received (the udp server is sending a message,applet is not receiving, i know the udp is sending correctly as i tested separately it with a client) 当尝试在applet上接收消息时,没有任何反应,没有任何内容被发送,也没有收到任何内容(udp服务器正在发送消息,applet没有收到,我知道udp发送正确,因为我单独测试它与客户端)

Here is the UDPclient.java applet: 这是UDPclient.java applet:

`` ``

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

Here is the HTML file i run the applet with: 这是运行applet的HTML文件:

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

And here is the server i'm using 这是我正在使用的服务器

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

I have been trying to follow the tutorial here :http://corvstudios.com/tutorials/udpMultiplayer.php to create this code. 我一直在尝试按照这里的教程:http://corvstudios.com/tutorials/udpMultiplayer.php来创建此代码。

i really didnt wanna have to end up using MINA, Tomcat or install any network framework - but if i have to let me know, it'll save me a lot of time 我真的不想最终使用MINA,Tomcat或安装任何网络框架 - 但如果我必须告诉我,它会节省我很多时间

Any help is sincerely appreciated in advanced! 任何帮助都是先进的!

The JRE used by your applet need to be configured to authorize access thé file system to your applet. 您的applet使用的JRE需要配置为授权您的applet访问文件系统。 See policy or security for applet 请参阅applet的策略或安全性

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM