Topic: 关于IO和SOCket的问题

  Print this page

1.关于IO和SOCket的问题 Copy to clipboard
Posted by: aikun
Posted on: 2004-04-28 17:54

我在用io当中的ObjectoutStream的 writerObject(a) 只有当我是字符串的时候 在客户端可以接受到,当它是一个image的时候就不行了,发出错是
java.io.NotSerializableException: java.awt.image.BufferedImage
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)

at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
at service.run(tcpServer.java:40)
at java.lang.Thread.run(Thread.java:536)
这是一个运行时的错误
我一直不清楚,writeObject();当中的参数只要是对象应该都 可以的吧,可是为什么 是Image类型的就不行呢,请各位高手快点帮帮我了
下边是代码 请各位小弟我看看了

这个是服务器端的
import java.net.*;
import java.io.*;
import java.awt.image.BufferedImage;
public class tcpServer
{
  public static void main(String args[])
  {
    try
    {
      ServerSocket ss=new ServerSocket(8001);
      while(true)
      {
        Socket s=ss.accept();
        new Thread(new service(s)).start();
      }
    }
    catch(Exception e)
    {System.out.println(e.getMessage());}
  }
}
class service implements Runnable
{
  Socket s;
  public service(Socket s)
  {
    this.s=s;
  }
  public void run()
  {
    try
    {
      InputStream ips =s.getInputStream();
      OutputStream ops=s.getOutputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(ips));
      ObjectOutputStream oos=new ObjectOutputStream(ops);
      System.out.println("我们是好朋友");
      BufferedImage image=new image().getImage();
      

      oos.writeObject(image);
      
      br.close();
      oos.close();
      s.close();
    }
    
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }
}
下边这个是客户端的

import java.io.*;
import java.net.*;
import java.awt.image.BufferedImage;
import javax.imageio.*;

public class tcpClient
{
  static BufferedImage image;
  public static void main(String[] args)
  {
    try
    {
    if (args.length<2)
    {
      System.out.println("请您输入 server 的端IP和端口号");
      return;
    }
    Socket s=new Socket (InetAddress.getByName(args[0]),Integer.parseInt(args[1]));
    InputStream ips=s.getInputStream();
    OutputStream ops=s.getOutputStream();
    DataOutputStream dos=new DataOutputStream(ops);
    ObjectInputStream ois=new ObjectInputStream(ips);
    dos.writeBytes("1");
    //image=(BufferedImage)ois.readObject();
    String a=ois.readObject().toString();
    //File f=new File(".","a.jpg");
    //ImageIO.write(image,"jpg", f);
    System.out.println(a);
    }catch(Exception e){}
  }
}
这个是取得图片的类

import java.awt.image.BufferedImage;

import java.awt.*;

public class image {
Dimension d=Toolkit.getDefaultToolkit().getScreenSize();
BufferedImage screenshot;
public BufferedImage getImage(){
try
   {
screenshot = (new Robot()).createScreenCapture(new
Rectangle(0, 0, (int) d.getWidth(), (int) d.getHeight()));
   }catch(AWTException e){System.out.println(e.getMessage());}
return screenshot;
}
}

2.Re:关于IO和SOCket的问题 [Re: aikun] Copy to clipboard
Posted by: huangjiacai
Posted on: 2004-05-04 12:44

不好意思
没仔细看代码
我想用串行化之后可以的,我做过的
你先串行化先试试了


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923