有问题,你的SERVER;
while(true){
      s=ss.accept();
      inStream=new ObjectInputStream(s.getInputStream());
      outStream=new ObjectOutputStream(s.getOutputStream());
      outStream.writeObject(vector);                  
    }
程序运行后两边都读SOCKET,所以出错了;

解决方案 »

  1.   

    楼上的,可否说清楚点。server向socket写,client读socket,我不太清楚你说的是我的哪句出了错?
      

  2.   

    outStream.writeObject(vector);                  
    更改成为outStream.elementAt(0) ;
    实验一下,另外错误信息详细一些。
      

  3.   

    server没有正常送对象到clientwhile(true){
          s=ss.accept();
          inStream=new ObjectInputStream(s.getInputStream());
          outStream=new ObjectOutputStream(s.getOutputStream());
          outStream.writeObject(vector);    
          //added      
          outStream.flush();     
          outStream.close();         
        }
      

  4.   

    我照两位说的改了,错误还是一样存在:
    C:\Temp\socket>java ObjectClient
    connection request...
    connection OK
    java.io.StreamCorruptedException: invalid stream header起初是直接传逻辑对象,后来看别人的例子,我将对象装到Vector中传输,还是一样的出错信息。请指点....
      

  5.   

    outStream.writeObject(new String("testObject"));    
    接受端也转化一下,看有没有问题。
      

  6.   

    改成字串对象也是一样的错误,不过,要是只传字串的话就没有必要用ObjectOutputStream了,就是想传个有结构的复杂对象。那样就可以避过数据协议的定制了。
      

  7.   

    网络的异常很多,只能在实践中总结经验。答案不会是不变的。import java.io.*;
    import java.net.*;
    import java.net.ServerSocket;
    import java.util.Vector;public class ObjectServer {
    ServerSocket ss=null;
    Socket s=null;
    ObjectInputStream inStream=null;
    ObjectOutputStream outStream=null;
    FileInputStream fin = null;
    ObjectObj obj = null;
    Vector vector = new Vector(2);public ObjectServer() {
      try{
        ss=new ServerSocket(7650);
     //   s.setSoTimeout(3000);
        obj = new ObjectObj();
        obj.setID(1);
        obj.setName("wukesong");
        vector.add(obj);
        ObjectObj obj2 = new ObjectObj();
        obj2.setID(5);
        obj2.setName("asdfasdfasd");
        vector.add(obj2);
      }catch(Exception e){
        e.printStackTrace();
      }
    }void waitForClient(){
      try{
        while(true){
          s=ss.accept();
          System.out.println("已经连接");
          outStream=new ObjectOutputStream(s.getOutputStream());
          outStream.writeObject(vector);
          outStream.flush();
          Thread.sleep(1000);    }
      }catch(Exception e){
        e.printStackTrace();
      }
    }public static void main(String[] args)
    {
        ObjectServer socketServer1 = new ObjectServer();
        socketServer1.waitForClient();
    }
    }import java.io.*;class ObjectObj implements java.io.Serializable
    {
        private int id = 0;
        private String name = "";    public int getID()
        {
            return id;
        }
        public void setID(int pID)
        {
            this.id = pID;
        }    public String getName()
        {
            return name;
        }
        public void setName(String pName)
        {
            this.name = pName;
        }
    }import java.net.*;
    import java.io.*;
    import java.util.*;public class ObjectClient{
        Socket socket=null;
        DataInputStream inStream=null;
        DataOutputStream outStream=null;
        FileOutputStream fout = null;    public ObjectClient() {
            try{
                System.out.println("connection request...");
                socket=new Socket("192.168.0.173",7650);
                System.out.println("connection OK");
                ObjectInputStream oin = new ObjectInputStream(socket.getInputStream());
                System.out.println("get stream...");
                //socket.setSoTimeout(3000);
                Vector vector = (Vector)oin.readObject();
                int size = vector.size();
                System.out.println("大小 :"+vector.size());
                for(int i=0;i<size;i++)
                {
                    ObjectObj obj = (ObjectObj)vector.get(i);
                    System.out.println("id="+obj.getID()+"");
                    System.out.println("name="+obj.getName());            }
                oin.close();
                socket.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }    public static void main(String[] args) {
            ObjectClient socketClient1 = new ObjectClient();
        }
    }
      

  8.   

    1.如果某一端没有到ObjectOutputStream或ObjectInputStream,不要生成此类对象。inStream=new ObjectInputStream(s.getInputStream());//得不到流
          outStream=new ObjectOutputStream(s.getOutputStream());
    就是一个很好的例子。
    2.由于安全性考虑,public 属性在网络传输中是不允许的。
    3.建议调用某实例的close方法之前最好判断null操作,特别是网络操作。
    4.异常信息在调试时期用printStackTrace()比较好。