2013-10-07 15 views
11

私は2つのJavaのnetbeansプロジェクトを持って、1つは他のサーバーですクライアントです。私は自分が作成したMessageクラスをサーバーに渡し、サーバーに変更を加えた後にクライアントに戻す必要があります。私はクラスメッセージを両方のプロジェクトに含めました。私はObjectOutputStreamObjectInputStreamを使ってオブジェクトを渡します。サーバーとクライアントの間の接続は正常でオブジェクトは通過しますが、メソッドを使用してオブジェクトを読み取ったときには、Messageクラスにキャストします。しかし、ClassNotFoundExceptionがサーバーでスローされます。それは、Messageクラスを見つけることができません。どうすれば解決できますか?クライアントのJavaのソケットを介してオブジェクトを送信

コード:サーバー

public void startServer() { 

    try { 
     ServerSocket welcomeSocket = new ServerSocket(PORT); 

     while (true) {  
      // Create the Client Socket 
      Socket clientSocket = welcomeSocket.accept(); 
      System.out.println("Socket Extablished..."); 
      // Create input and output streams to client 
      ObjectOutputStream outToClient = new ObjectOutputStream(clientSocket.getOutputStream()); 
      ObjectInputStream inFromClient = new ObjectInputStream(clientSocket.getInputStream()); 

      // Read modify 
      // TODO here 

      /* Create Message object and retrive information */ 
      LinkedList<Message> inList = new LinkedList<>(); 
      Message inMsg = null; 
      inList = (LinkedList<Message>)inFromClient.readObject(); 
      inMsg = inList.pop(); 

      /* Modify the message object */ 
      inMsg.setMessage(inMsg.getMessage().toUpperCase()); 
      inMsg.setIndex(5); 
      inMsg.setAverage(10.5f); 

      /* Send the modified Message object back */ 
      outToClient.writeObject(inMsg);   

     } 

    } catch (Exception e) { 
     System.err.println("Server Error: " + e.getMessage()); 
     System.err.println("Localized: " + e.getLocalizedMessage()); 
     System.err.println("Stack Trace: " + e.getStackTrace()); 
     System.err.println("To String: " + e.toString()); 
    } 
} 

"サーバー"

java.lang.ClassNotFoundException: rusl.online.examination.system.client.utility.Message 

私は、Java RMIを使用する必要がありますでスローされた例外のため

public void startClient() { 
    try { 
     // Create the socket 
     Socket clientSocket = new Socket(HOST, PORT); 
     // Create the input & output streams to the server 
     ObjectOutputStream outToServer = new ObjectOutputStream(clientSocket.getOutputStream()); 
     ObjectInputStream inFromServer = new ObjectInputStream(clientSocket.getInputStream()); 

     // Read modify 
     // TODO here 

     /* Create The Message Object to send */ 
     LinkedList<Message> msgList = new LinkedList<>(); 
     Message msg = new Message(); 
     msg.setMessage("Kasun"); 
     msg.setIndex(1); 
     msg.setAverage(5.5f); 
     msgList.push(msg); 

     /* Send the Message Object to the server */ 
     outToServer.writeObject(msgList);    

     /* Retrive the Message Object from server */ 
     LinkedList<Message> inFromServerList = new LinkedList<>(); 
     Message msgFrmServer = null; 
     inFromServerList = (LinkedList<Message>)inFromServer.readObject(); 
     msgFrmServer = inFromServerList.pop(); 

     /* Print out the recived Message */ 
     System.out.println("Message: " + msgFrmServer.getMessage()); 
     System.out.println("Index: " + msgFrmServer.getIndex()); 
     System.out.println("Average: " + msgFrmServer.getAverage()); 


     clientSocket.close(); 

    } catch (Exception e) { 
     System.err.println("Client Error: " + e.getMessage()); 
     System.err.println("Localized: " + e.getLocalizedMessage()); 
     System.err.println("Stack Trace: " + e.getStackTrace()); 
    } 
} 

コード? RMIを使用しないでこれを解決する方法はありますか?

+0

*あなたが* RMIを使用していないため、この質問には適切なタグではありません。 – EJP

答えて

7

サーバー側のメッセージがrusl.online.examination.system.client.utility.Messageであることを確認してください。それは事実ではないようです。

+0

それは働いて、:)、プロセスで別のエラーを発見した。私はここに質問を掲載する前に同じ方法を試みた。しかし、奇妙なことにdidn; t仕事..それはこの時間を働いた..ありがとう:) –

1

クラスのオブジェクトをソケットに送信する場合。もう一方の端でオブジェクトを再現するには、オブジェクトをキャストする必要があります。そのためには、両端のクラス定義が必要です。

メッセージを作成するために使用したサーバプログラム用の同じMessageクラスも正しくインポートされていることを確認してください。

+0

キャストの前にクラス定義が必要です。オブジェクト自体をデシリアライズする必要があります。 – EJP

+0

それは仲間を解決しました、あなたの助けをありがとう:) –

関連する問題