не могу отправить изображение с сервера клиенту в Java - PullRequest
0 голосов
/ 15 марта 2012

edit # 2: Чак указал на ошибку, поэтому я исправил ее, спасибо, (я запускаю только отправитель изображения один раз) Теперь я получаю только одну ошибку на стороне клиента, если кто-то еще может помочь, хорошо.Если нет, то все еще в порядке, потому что теперь у меня есть только одна ошибка, чтобы исправить, спасибо.

java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
    at java.io.ObjectInputStream.<init>(Unknown Source)
    at Client.run(Client.java:45)
    at java.lang.Thread.run(Unknown Source)

Привет, я пытаюсь создать приложение удаленного управления (вроде).

Я пытаюсьчтобы запрограммировать приложение (сервер), которое передает изображение клиенту (с одного компьютера на другой, протестировал его на своем компьютере и на школьной сети)

Я попытался отладить его, и я не понимаю, чтоЯ запрограммирован неправильно.Может кто-нибудь сказать, пожалуйста, что не так с программой?(все это выглядит логически правильным для меня).

Я опубликовал ошибки, которые я получаю, и исходный код ниже

Я вижу окна (на стороне клиента), и в них нет изображениякадр клиента, поэтому я предполагаю, что изображение не было передано.

java.io.StreamCorruptedException: invalid type code: AC
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at Client.run(Client.java:47)
    at java.lang.Thread.run(Unknown Source)

, и я получаю много ошибок на стороне сервера (отправляет изображение) (слишком много их всех)одинаковы)

Исключение в теме "Thread-91" Исключение в теме "Thread-69"

Exception in thread "Thread-25" 

10Exception in thread "Thread-70"

 java.lang.OutOfMemoryError: Java heap space
t sun.awt.windows.WRobotPeer.getRGBPixels(Unknown Source)
    at java.awt.Robot.createScreenCapture(Unknown Source)
        at ImageSender.run(ImageSender.java:27)
        java.lang.OutOfMemoryError: Java heap space
        at sun.awt.windows.WRobotPeer.getRGBPixels(Unknown Source)
    at java.awt.Robot.createScreenCapture(Unknown Source)
    at ImageSender.run(ImageSender.java:27)
java.lang.OutOfMemoryError: Java heap space
    at sun.awt.windows.WRobotPeer.getRGBPixels(Unknown Source)
    at java.awt.Robot.createScreenCapture(Unknown Source)
    at ImageSender.run(ImageSender.java:27)
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
    at sun.awt.windows.WRobotPeer.getRGBPixels(Unknown Source)
        3
       10
    at java.awt.Robot.createScreenCapture(Unknown Source)
    at ImageSender.run(ImageSender.java:27)
         3Exception in thread "Thread-23" 

10
java.lang.OutOfMemoryError: Java heap space
        java.lang.OutOfMemoryError: Java heap space
        java.lang.OutOfMemoryError: Java heap space
        java.lang.OutOfMemoryError: Java heap space
        java.lang.OutOfMemoryError: Java heap space
        Exception in thread "Thread-19" Exception in thread "Thread-37" 
        java.lang.OutOfMemoryError: Java heap space
        Exception in thread "Thread-29" java.lang.OutOfMemoryError: Java heap space
        java.lang.OutOfMemoryError: Java heap space
        java.lang.OutOfMemoryError: Java heap space

main:

import java.io.IOException;


public class Main {
private int a;
private Server s;
private Client t;
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Main start=new Main();
    }
    public Main()
    {
        try {
            a=System.in.read();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        a=a-48;
        System.out.println(a);
        if(a==0)
        {
            Server s=new Server();
        }
        else
        {
            Client t=new Client();
        }

    }

}

serverотправляет изображение с ImageSender:

import java.awt.AWTException;
import java.awt.Robot;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;


public class Server extends Thread {
    private ServerSocket ssocket;
    private Socket connection;
    private InputStream in;
    private ObjectInputStream out;
    private Robot robot;

    public Server()
    {
        try {
            robot=new Robot();
        } catch (AWTException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Thread t=new Thread(this);
        t.start();
    }
    public void run()
    {
        try {
            ssocket=new ServerSocket(5000);
            System.out.println("waiting for connections");
            connection=ssocket.accept();
            System.out.println("Got connection from"+connection.getInetAddress().getHostName());
            System.out.println("2");
            while (connection.isConnected()==true)
                {
                System.out.println("3");
                ImageSender sender = new ImageSender(connection);
                    sender.start();
                }
            /*
            out.close();
            in.close();
            connection.close();
            ssocket.close();
            */
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

ImageSender:

import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;

import javax.swing.ImageIcon;

class ImageSender extends Thread{       
    Socket connection;
    Robot robot; // Used to capture screen
    Rectangle rectangle; // Used to represent screen dimensions
    ImageSender(Socket sc){
        connection=sc;
    }
    public void run(){
        try{
            this.robot = new Robot();
            Toolkit t=Toolkit.getDefaultToolkit();
            Rectangle rect=new Rectangle(t.getScreenSize());
            while(true){
                System.out.println("10");
                OutputStream out=connection.getOutputStream();
                ObjectOutputStream oout=new ObjectOutputStream(out);
                BufferedImage b_img=robot.createScreenCapture(rect);
                ImageIcon img=new ImageIcon(b_img);
                System.out.println("12");
                oout.writeObject(img);
                System.out.println("133");
                oout.close();   
                out.close();
            }
        }catch(Exception e){System.out.println(e);}
    }   
}

клиент:

import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.ImageIcon;


public class Client extends Frame implements Runnable {
    Socket cSocket;
    OutputStream out;
    ObjectOutputStream oout;
    Thread t;
    String serverIp;
    public Client()
    {
        Toolkit tk = Toolkit.getDefaultToolkit();
        this.setSize(tk.getScreenSize());

        this.setExtendedState(Frame.MAXIMIZED_BOTH); 
        this.setUndecorated(true);

        this.serverIp="localhost";

        Thread t=new Thread(this);
        t.start();  
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        try {
            cSocket = new Socket(serverIp, 5000);
            out=cSocket.getOutputStream(); 
            oout=new ObjectOutputStream(out);
            this.setVisible(true);
            while(true){
                InputStream in=cSocket.getInputStream();
                ObjectInputStream oin=new ObjectInputStream(in);                        
                try {
                    ImageIcon img = (ImageIcon)oin.readObject();
                    Graphics g=getGraphics();
                    img.paintIcon(this,g,0,0);
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }

}

сильный текст

1 Ответ

0 голосов
/ 15 марта 2012

Ну, следующее выглядит странно.Вы продолжаете создавать и запускать объекты ImageSender () (Threads).Это похоже на серьезную ошибку.

 while (connection.isConnected()==true) 
 { 
   System.out.println("3"); 
   ImageSender sender = new ImageSender(connection); 
   sender.start(); 
 } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...