1

我用于套接字通信的代码在命令提示符下运行的程序中工作,但是当在嵌入网页的小程序中使用相同的代码时,就会出现安全问题。它无法连接...请帮帮我,需要在 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);
            }
        }

有什么办法可以解决这个问题??

4

2 回答 2

2
  1. An unsigned applet can only connect to the host it was loaded from.

  2. Your applet tries to connect to 'localhost'. So the server must be running on localhost too. Is it? How are you arranging that?

  3. You are using readUTF() to read, but println() to write. That won't work. println() needs readLine(), andreadUTF() needs writeUTF().

于 2013-04-06T12:21:00.837 回答
-1

你能发布你得到什么样的错误吗?即使它也是与安全相关的问题

一个小建议:

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

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){
    }
于 2013-04-06T12:46:36.590 回答