編輯#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();
}
}
}
強大的文本
請澄清 - 當你說它不起作用時,你是什麼意思?怎麼了?你有錯誤嗎?你有空白的圖像嗎? – 2012-03-15 17:43:09