2016-07-30 5 views
0

SimpleClient.javaクラスは、あなたがあなたの記事で<code>testobject</code>クラスを繰り返してきたという事実から

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ファイルを作成し、それを2つのプロジェクト間のライブラリとして使用する必要があります。同じ "見える" 2つの独立したJavaクラスを作成しないでください –

答えて

2

を例外が見つかりません、それを2つのコピーを使用できると思うことは明らかです。できません。同じパッケージの両端で同じものを使用する必要があります。好ましくは同じバイナリである。

NB readObject()は、nullを送信した場合のみnullを返します。

0

@EJPのように、クライアントとサーバーは同じtestobjectクラスファイルを使用する必要があります。

System.out.println("From client: " + to)System.out.println("From server: " + to)を追加して、パッケージ名とクラス名の両方を組み合わせたオブジェクトのフルパス名を出力します。

また、キーワードinstance ofを使用して、オブジェクトのクラスタイプを使用前に確認できます。

関連する問題