1

大学向けの絞首刑執行人ゲームを開発しています。また、サーバーとクライアントを使用してソケットを介する必要があります。ゲームは今のところ問題なく動作します。

しかし、2 人で同じ単語を推測しようとすると、1 人のユーザーが選択した文字を知る必要があるため、他のユーザーの GUI でその文字を無効にすることができます。

だから、反対側のボタンを無効にするIDを持つレターオブジェクトを送信しようとしています。最初にメッセージを送信し、オブジェクトを送信することを警告しているので、例外は発生しません。

送信した最初の 2 つのオブジェクトのみを読み取ると、3 番目のオブジェクトでjava.io.StreamCorruptedExceptionという例外が発生します。誰でも理由を知っていますか?

    Sending:
    toClient= new DataOutputStream(socketConection.getOutputStream());
    toClient.writeBytes("VK_Letra\n");
    objectToClient= new ObjectOutputStream(socketConetion.getOutputStream());
    objectToClient.writeObject(new Letter());
    objectToClient.flush();

    Receiving:
    fromServer = new BufferedReader(new InputStreamReader(socketCliente.getInputStream()));
    objectFromServer = new ObjectInputStream(socketCliente.getInputStream());

public void run(){
    String str;
    try{
        while(true){
            str = fromServer.readLine();

            if(str.equals("VK_Letter")){
                Letter l = (Letter) objectFromServer.readObject();
                System.out.println(l.getLetter());
                button[l.getId()].setEnabled(false);
            }else{
                chat.append(str+ "\n");
                chat.setCaretPosition(chat.getDocument().getLength());
            }
        }
    }catch(IOException | ClassNotFoundException e){
        JOptionPane.showMessageDialog(/* Error Message */);
    }
}
4

2 に答える 2

1

私が使用するアプローチは、オブジェクトを送受信するだけになるように、すべてをオブジェクトとして持つことです。次に、オブジェクトは、パラメータ、引数、またはデータとともに実際のメッセージを示します。

読み取り行と取得オブジェクトの間で混乱しています。

于 2012-09-25T16:57:37.563 に答える
1

混乱の一般的な原因は、同じストリームに異なるストリーム タイプを混在させる場合です。

2 つの異なる問題の良い例があります。

  • DataOutptuStream や ObjectOutputStream など、同じストリームで複数のストリームを使用しないでください。
  • BufferedReader や ObjectInputStream などのバイナリ ストリームとテキスト ストリームを混在させないでください。

解決策は、ニーズに合ったものを 1 つだけ使用し、それを使用することです。

于 2012-09-25T16:58:50.847 に答える