客户端:
Integer obj=new Integer();
Socket socketConnection = new Socket("127.0.0.1", 11111);
ObjectOutputStream clientOutputStream = new ObjectOutputStream(socketConnection.getOutputStream());
clientOutputStream.writeObject(obj);
服务器端:
ServerSocket socketConnection = new ServerSocket(11111);
Socket pipe = socketConnection.accept();
ObjectInputStream serverInputStream = new ObjectInputStream(pipe.getInputStream());
obj= (Integer) serverInputStream.readObject();上面代码中,可以传输一个Integer对象,如果有时候我使用这个程序传递一个String对象,服务器上怎么知道要使用
obj= (String) serverInputStream.readObject();
也就是在传递对象时候能够不能够加个对象类型的标识。
多谢!

解决方案 »

  1.   

    Object obj=serverInputStream.readObject(); 
    obj.getClass().getName()获取类型名
    根据此名称来区分,或者用instanceof来判断if(obj instanceof String)
    {
       String str=(String)obj;
    }
    else if(obj instanceof Integer)
    {
       Integere i=(Integer)obj;
    }
      

  2.   

    谢谢1楼的回复
    你说的方法我也想到了
    这个方法有个缺陷是我要传递的obj类型太多,全部使用instanceof来判断不太现实。我设想的方式是:
    客户端在执行
    clientOutputStream.writeObject(obj);
    时传递一个cmdId进去服务器端使用
    switch(cmdId){
       case 1:
            method1();
       case 2:
            method2();
       ...
    }public method1(){
        obj=   (Integer)   serverInputStream.readObject(); 
    }
    public method2(){
        obj=   (String)   serverInputStream.readObject(); 
    }我认为这样好一点的是服务器端读取对象的时候,不需要知道接受对象的类型,
    而根据cmdId转到对于的方法上再去取出对象。
    只是目前还不知道怎么实现。