2012-03-15 145 views
0

編輯#2: 查克指出一個錯誤,所以我修復它,謝謝,(我只運行圖像發送器一次) 現在我只有一個錯誤在客戶端如果任何人仍然可以幫助,確定。 如果不是,它仍然可以,因爲現在我只有一個錯誤修復,所以謝謝。不能發送圖像從服務器到客戶端在java

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) 

嗨我想構建一個遠程控制應用程序(排序)。

我試圖發送圖像到客戶端的應用程序(服務器)進行編程(從一臺PC到另一個,在我自己的電腦,並在學校的局域網測試過)

我試圖調試它,和我不明白我編程錯了什麼。 任何人都可以告訴我程序有什麼問題嗎? (這一切在我看來都是合乎邏輯的)。

我張貼我得到的錯誤和下面

的源代碼我看到一個窗口(客戶端),並且沒有圖像中的客戶端幀,所以我想的圖像沒有被傳送。

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) 

,我得到了很多在服務器端錯誤(發送圖像)(太多所有的人都是一樣的)

異常的線程「主題-91」異常在線程 「主題-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 

主:

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

    } 

} 

服務器發送圖片與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(); 
     } 


    } 

} 

強大的文本

+0

請澄清 - 當你說它不起作用時,你是什麼意思?怎麼了?你有錯誤嗎?你有空白的圖像嗎? – 2012-03-15 17:43:09

回答

0

好了,下面看起來很奇怪。您不斷創建並啓動ImageSender()對象(線程)。這看起來像是一個嚴重的錯誤。

while (connection.isConnected()==true) 
{ 
    System.out.println("3"); 
    ImageSender sender = new ImageSender(connection); 
    sender.start(); 
} 
+0

現在客戶端只剩下一個錯誤,謝謝 – user1272067 2012-03-15 19:08:53

相關問題