java applet套接字连接问题

时间:2013-04-06 11:35:45

标签: java security sockets applet connection

我用于套接字通信的代码在命令提示符下运行的程序中工作,但是当在嵌入网页的applet中使用相同的代码时,存在安全问题。它不连接...... 请帮帮我,需要在3天内完成这个.... 服务器:

    public void run()
{
    try
    {
        ServerSocket s1 = new ServerSocket(5555); // create a server socket and bind it to port number.

        Socket s2 = s1.accept(); // make the server listen for a connection.

        DataInputStream in = new DataInputStream(s2.getInputStream());
        PrintStream out = new PrintStream(s2.getOutputStream());
        while(true)
        {
            char[] buf = new char[150];
            String line = in.readUTF(); // wait for the client to send a line of text.
            if(line.equals("send"))
            {
                for(int i=0;i<150;i++)
                    buf[i]=0;
                if(Traffic1.s1wiut) buf[0]='1';
                if(Traffic1.s1wist) buf[1]='1';
                if(Traffic1.s1wirt) buf[2]='1';
                if(Traffic1.s1silt) buf[3]='1';
                if(Traffic1.s1siut) buf[4]='1';
                if(Traffic1.s1sirt) buf[5]='1';
            }
            String line1 = new String(buf);
            out.println(line1); // send the data to the client.
            out.flush(); // flush the stream to ensure that the data reaches the other end.
        }
    }

客户方:

    public void run()
{

    while(true)
    {
        int serverPort = 5555; // port number on which the server is listening.

        try
        {
            InetAddress ipAddress = InetAddress.getLocalHost(); // create an object that represents the above IP address.

            Socket socket = new Socket(ipAddress,serverPort); // create a socket with the server's IP address and server's port.

            DataInputStream in = new DataInputStream(socket.getInputStream());
            PrintStream out = new PrintStream(socket.getOutputStream());

            while(true)
            {
                char[] buf = new char[150];
                String line = "send"; // request string to send to server.
                out.println(line); // send the above line to the server.
                out.flush(); // flush the stream to ensure that the data reaches the other end.
                line = in.readUTF(); // wait for the server to send a line of text.
                buf = line.toCharArray();
                if(buf[0]=='1')     s1wiut=true;    else    s1wiut=false;
                if(buf[1]=='1')     s1wist=true;    else    s1wist=false;
                if(buf[2]=='1')     s1wirt=true;    else    s1wirt=false;
                if(buf[3]=='1')     s1silt=true;    else    s1silt=false;
                if(buf[4]=='1')     s1siut=true;    else    s1siut=false;
                if(buf[5]=='1')     s1sirt=true;    else    s1sirt=false;

                repaint();
                Thread.sleep(1000);
            }
        }

可以采取哪些措施来解决这个问题?

2 个答案:

答案 0 :(得分:2)

  1. 无符号小程序只能连接到加载的主机。

  2. 您的小程序尝试连接到“localhost”。所以服务器也必须在localhost上运行。是吗?你是如何安排的?

  3. 您正在使用readUTF()进行阅读,但要println()进行阅读。那不行。 println()需要readLine()readUTF()需要writeUTF()

答案 1 :(得分:0)

您可以发布您遇到的错误吗?即使是与安全相关的问题

一个小建议:

我认为您需要更改服务器代码,如下所示(因为服务器总是监听接受客户端套接字)

public void run()
{
    try
    {
        ServerSocket s1 = new ServerSocket(5555); // create a server socket and bind it to port number.

        while(true){

        Socket s2 = s1.accept(); // make the server listen for a connection.

        DataInputStream in = new DataInputStream(s2.getInputStream());
        PrintStream out = new PrintStream(s2.getOutputStream());
        while(true)
        {
            char[] buf = new char[150];
            String line = in.readUTF(); // wait for the client to send a line of text.
            if(line.equals("send"))
            {
                for(int i=0;i<150;i++)
                    buf[i]=0;
                if(Traffic1.s1wiut) buf[0]='1';
                if(Traffic1.s1wist) buf[1]='1';
                if(Traffic1.s1wirt) buf[2]='1';
                if(Traffic1.s1silt) buf[3]='1';
                if(Traffic1.s1siut) buf[4]='1';
                if(Traffic1.s1sirt) buf[5]='1';
            }
            String line1 = new String(buf);
            out.println(line1); // send the data to the client.
            out.flush(); // flush the stream to ensure that the data reaches the other end.
          }
       } // end of while
    }

您的客户如下所示

public void run()
{

    int serverPort = 5555; // port number on which the server is listening.

    try
    {
        InetAddress ipAddress = InetAddress.getLocalHost(); // create an object that represents the above IP address.

        Socket socket = new Socket(ipAddress,serverPort); // create a socket with the server's IP address and server's port.

        DataInputStream in = new DataInputStream(socket.getInputStream());
        PrintStream out = new PrintStream(socket.getOutputStream());

        while(true)
        {
            char[] buf = new char[150];
            String line = "send"; // request string to send to server.
            out.println(line); // send the above line to the server.
            out.flush(); // flush the stream to ensure that the data reaches the other end.
            line = in.readUTF(); // wait for the server to send a line of text.
            buf = line.toCharArray();
            if(buf[0]=='1')     s1wiut=true;    else    s1wiut=false;
            if(buf[1]=='1')     s1wist=true;    else    s1wist=false;
            if(buf[2]=='1')     s1wirt=true;    else    s1wirt=false;
            if(buf[3]=='1')     s1silt=true;    else    s1silt=false;
            if(buf[4]=='1')     s1siut=true;    else    s1siut=false;
            if(buf[5]=='1')     s1sirt=true;    else    s1sirt=false;

            repaint();
            Thread.sleep(1000);
        }
    }catch(Exception e){
    }