2012-03-15 26 views
0

編集#2: チャックがバグを指摘してくれましたので、ありがとうございました。(画像送信者は​​一度だけ実行します) クライアント側で1つのエラー誰かがまだ助けることができれば、大丈夫です。 まだ解決していないのであれば、私はただ一つのエラーがあります。サーバからクライアントに画像を送信することができません

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で、学校のLAN上でそれをテストし、一台のPCから別の)クライアントに画像を送信したアプリケーション(サーバー)をプログラムしようとしています

、およびI私が間違ってプログラムしたことを理解していない。 誰でもプログラムの問題点を教えていただけますか? (それはすべて私にとって論理的に正しいと思われます)。

私は窓(クライアント側)を参照してくださいと私は画像が転送されなかったと仮定して何の画像がクライアントフレームではありません私が取得エラーと

下記のソースコードを掲載しました。

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

あなたがそれがうまくいかないと言ったら、どういう意味ですか?何が起こるのですか?間違いはありますか?あなたは空白の画像を取得しますか? –

答えて

0

まあが、以下は奇妙に見えます。 ImageSender()オブジェクト(スレッド)の作成と起動を続けます。これは深刻なバグのようです。

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

クライアント側に残っているエラーは1つだけです。ありがとう – user1272067

関連する問題