can';t在java中从服务器向客户端发送图像
编辑#2: chuck指出了一个bug,所以我修复了它,非常感谢,(我只运行了一次图像发送器) 现在,如果还有人能够提供帮助,我在客户端只得到一个错误,好吗。 如果没有,它仍然可以,因为现在我只有一个错误要修复,所以谢谢can';t在java中从服务器向客户端发送图像,java,swing,sockets,networking,Java,Swing,Sockets,Networking,编辑#2: chuck指出了一个bug,所以我修复了它,非常感谢,(我只运行了一次图像发送器) 现在,如果还有人能够提供帮助,我在客户端只得到一个错误,好吗。 如果没有,它仍然可以,因为现在我只有一个错误要修复,所以谢谢 java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source) at java.io.ObjectInputStream$BlockDataI
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)
我在服务器端(发送图像)收到了很多错误(太多了,它们都是一样的)
线程“thread-91”中的异常线程“thread-69”中的异常
主要内容:
服务器使用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();
}
}
}
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.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();
}
}
}
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();
}
}
}
strong text好吧,下面的内容看起来很奇怪。继续创建和启动ImageSender()对象(线程)。这看起来像一个严重的错误
while (connection.isConnected()==true)
{
System.out.println("3");
ImageSender sender = new ImageSender(connection);
sender.start();
}
请澄清——当你说它不起作用时,你是什么意思?会发生什么?你有错误吗?你有一张空白的照片吗?
while (connection.isConnected()==true)
{
System.out.println("3");
ImageSender sender = new ImageSender(connection);
sender.start();
}