在做一个类似qq的程序,用的TCP消息是以对象的形式发送的(定义的一个Message类)
由于需要后来又在Message类里加了一个Vector<User> vec,这里的User也是一个类(Message类和User类都implemets Serializable了),并新增了构造方法Message(int t,int i,Vector<User> vec)现在问题是sendMessage(new Message(type,id,vec))发送不出消息了,但是vec=null时又能发出去不知道问题出在哪,谁有类似经历或能给点建议啊,卡住了。

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【cctdbnj】截止到2008-07-02 01:24:22的历史汇总数据(不包括此帖):
    发帖的总数量:7                        发帖的总分数:410                      
    结贴的总数量:7                        结贴的总分数:410                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

    User类并没有什么特殊之处,目前也没有写定义其他操作,如下:import java.io.*;class User implements Serializable {
    private int id;
    private String psw;
    private String nickname;
    private int status;
    private int image;
    private String name; 
    private int age;
    private String sex;
    private String address;
    private String phone;
    private String introduce;
    private String birth;
    private String metier;
    private String email;
    private String mailnumber;
    private String other;
    User(int id,String nickname,int status,int image) {
    this.id=id;
    this.nickname=nickname;
    this.status=status;
    this.image=image;
    }
    User(int id,String nickname,int status,int image,String name,int age,String sex,
    String address,String phone,String introduce,String birth,String metier,
    String email,String mailnumber,String other) {
    this.id=id;
    this.nickname=nickname;
    this.status=status;
    this.image=image;
    this.name=name;
    this.age=age;
    this.sex=sex;
    this.address=address;
    this.phone=phone;
    this.introduce=introduce;
    this.birth=birth;
    this.metier=metier;
    this.email=email;
    this.mailnumber=mailnumber;
    this.other=other;
    }
    public int  getStatus() {
    return status;
    }
    public String getNickname() {
    return nickname;
    }
    }
      

  3.   

    Vector <User> vec1 我猜你得仔细书写发送的代码,比如循环发送User
    2 发上你的发送代码看看
    3 难道没有任何异常?
      

  4.   

    对了,发送数据记得flush();否则数据有可能发不过去的。
      

  5.   

    发不出去:接收端没有接收到,发送端我没有发现什么发送用的一个发送方法,现在问题是发送不含Vcetor<User>的Message时能发出去,比如Message类中还有构造方法Message(int type,int id1, int id2, String msg),在同一个地方调用sendMessage(new Message(type,id1,id2,msg))可以发出去,换成sendMessage(new Message(type,id,vec))就不行了(vec是Vector<User>),若vce是null也可以发出去下面是sendMessage方法:
    public void sendMsg(ObjectOutputStream oos,Message msg) {
        try {
    oos.writeObject(msg);
    oos.flush();
        }catch (IOException e) {
    System.out.println("n5"+e);
        }
    }
      

  6.   

    上面是服务器端发送,客户端接收代码为:
    // 这是在线程的run方法中
    Message msg=null;
    String tmStr=new String();
    while ((msg=receiveMsg(ois))!=null) {

    if (msg.getType()==0) {
        System.out.println(linkStatus+"=xxxx="+tmStr);
    }
    if (msg.getType()==-1) { //接收含有Vector<User>的消息
            //如果服务器端调用语句没有Vector<User>,如7楼所示,能打印下面语句
        System.out.println("friends msg");
    }
    if (msg.getType()==2) {
        System.out.println("friends test 2");
    }
    }
      

  7.   

    上面的receiveMse方法如下:public Message receiveMsg(ObjectInputStream ois) {
        Message msg=null;
        try {
    msg=(Message)ois.readObject();
        }catch (NullPointerException e) {
    System.out.println(e);
        }catch (ClassNotFoundException e) {
    System.out.println(e);
        }catch (IOException e){
            System.out.println(e);
        }
        return msg;
    }
      

  8.   

    Message也帖出来吧,方便大家分析。。先顶一下
      

  9.   

    刚才贴上面的代码时,发现最后的IOException没有加输出语句,原来问题就在这,抛出了异常,如下
    java.io.InvalidClassException: User; local class incompatible: stream classdesc serialVersionUID = -3287261120039280208, local class serialVersionUID = -8234030305461437969应该是User类的问题,上面这句具体是什么意思还不是太明白。所以也不知道怎么改。
      

  10.   

    我猜是这样的,你的Message已经序列化了,Vector<User>是包含在Message类内的,User就不用再序列化一次了,你把
    class User implements Serializable 改成class User看看
      

  11.   

    User类如果不序列化,发送消息时会抛出这个异常:java.io.NotSerializableException: User,接收消息时会:java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: User