0

私はsocketを使ってグループチャットプログラムを作っていますが、メッセージオブジェクトをソケットobjectOutputStreamに書き込めません。サーバー側のobjectInputStreamは何も見つかりませんでした(avalible = 0)。私はフラッシュしようとしているが、それは動作しません。助けてください。ObjectOutputStreamは自分のオブジェクトを書き込めません

enum MessageStatus implements Serializable {Mess, Offline}; 
public class Message implements Serializable{ 
String mess; 
String senderName; 
int senderID; 
MessageStatus type; 

public Message(String mess, int SenderID, String SenderName) { 
    this.mess = mess; 
    this.senderID = SenderID; 
    this.senderName = SenderName; 
} 

私はこのようにそれを書くことを試みている:私のソケットはokです

Message msg = new Message(txtChat.getText().trim(), user.id, user.name); 
msg.type = MessageStatus.Mess; 
try { 
     user.Output.writeObject(msg); 
     user.Output.flush(); 

、私は私の物、いくつかの文字列を書いたり、int型とそれが仕事ではなく、しようとしています。 ものがあるかどうかを知るためにavailable()に依存しないでください、私は私のオブジェクトはソケット

答えて

1

に書かれていなかったと思う私はサーバ側のソケットオブジェクトの入力ストリーム内のメッセージまたはオブジェクトとしてそれを取ることを試みたが、それは.ClassNotFoundException を捨てます実際にロードするには、ブロックせずに読み取ることができるバイト数だけを返します。

Message msg = new Message("Hello", 123, "world"); 
    System.out.printf("Before serialization = %s%n", msg); 
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
    ObjectOutputStream oos = new ObjectOutputStream(byteArrayOutputStream); 
    oos.writeObject(msg); 
    oos.flush(); 
    oos.close(); 
    ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); 
    ObjectInputStream ois = new ObjectInputStream(byteArrayInputStream); 
    System.out.printf("available = %d%n", ois.available()); 
    Message message = (Message) ois.readObject(); 
    System.out.printf("After deserialization = %s%n", message); 
    ois.close(); 

出力は次のとおりです:

Before serialization = Message{mess='Hello', senderName='world', senderID=123, type=Mess} 
available = 0 
After deserialization = Message{mess='Hello', senderName='world', senderID=123, type=Mess} 

は、私は、メッセージが適切に直列化して、デシリアライズが、それでもavailable戻り0で証明されていることがわかります

あなたのコードを使用して、私はこれを行う場合そのような必要性のためにavailableを信頼してはいけません。

+0

サー、ソケット側のオブジェクト入力ストリームでメッセージまたはオブジェクトとして受け取るようにしましたが、例外が発生しました.ClassNotFoundException オブジェクトがソケットに書き込まれていないと思います –

+0

おそらく、 。サーバーのクラスパスにクラスがあるかどうか確認できますか? –

+0

私はサーバでも同じクラスを持っています。先生 –

関連する問題