2016-07-30 90 views
0

SimpleClient.java类未发现异常

import java.net.*; 
import java.io.*; 

class testobject implements Serializable { 

    int value; 
    String id; 

    public testobject(int v, String s) { 
     this.value = v; 
     this.id = s; 
    } 
} 

public class SimpleClient { 

    public static void main(String args[]) { 
     try { 
      Socket s = new Socket("localhost", 2002); 
      OutputStream os = s.getOutputStream(); 
      ObjectOutputStream oos = new ObjectOutputStream(os); 
      testobject to = new testobject(1, "object from client"); 
      oos.writeObject(to); 
      oos.writeObject(new String("another object from the client")); 
      oos.close(); 
      os.close(); 
      s.close(); 
     } catch (Exception e) { 
      System.out.println(e); 
     } 
    } 
} 

SimpleServer.java

import java.net.*; 
import java.io.*; 

class testobject implements Serializable { 

    int value; 
    String id; 

    public testobject(int v, String s) { 
     this.value = v; 
     this.id = s; 
    } 
} 

public class SimpleServer { 

    public static void main(String args[]) { 
     int port = 2002; 
     try { 
      ServerSocket ss = new ServerSocket(port); 
      Socket s = ss.accept(); 
      InputStream is = s.getInputStream(); 
      ObjectInputStream ois = new ObjectInputStream(is); 
      testobject to = (testobject) ois.readObject(); 
      if (to != null) { 
       System.out.println(to.id); 
      } 
      System.out.println((String) ois.readObject()); 
      is.close(); 
      s.close(); 
      ss.close(); 
     } catch (Exception e) { 
      System.out.println(e); 
     } 
    } 
} 
+3

了两个类**一模一样的**包?既然你还没有宣布[的serialVersionUID(https://stackoverflow.com/questions/285793/what-is-a-serialversionuid-and-why-should-i-use-it),一举两得类**准确相同的**内容?更重要的是;为什么不将'TestObject'作为一个单独的单元编译并在其他项目中使用?最后Java中的类在** PascalCase中总是**,**没有借口**。 –

+0

你应该做一个JAR文件为您的“芯”的对象,并使用它作为你的两个项目之间的库。不要让“看起来”相同的两个独立的Java类 –

回答

2

的事实,你重复testobject类在您的文章,它很明显,你认为你可以使用它的两个副本。你不能。你必须在同一个包中使用同一个两端。最好是相同的二进制。

NB readObject()只有当你发送一个空返回null。

0

正如@EJP提到的,客户端和服务器应该使用相同的testobject类文件。

要验证它,请添加System.out.println("From client: " + to)System.out.println("From server: " + to)以打印包含名称和类名称的对象的完整路径名。

此外,您还可以使用关键字instance of以确保对象的类类型为你使用它之前,想要的东西。