0

私はこの問題を抱えていますが、何が悪いのかわかりません。私はインターネット上で検索しましたが、成功しませんでした。

そのため、Java のソケットを介してオブジェクトを送信する必要がありますが、その方法がわかりません。私は非常に多くの方法を試しました。オブジェクトをシリアル化し、オブジェクトを直接書き込もうとしました。しかし、何も機能していないようです。

詳細は、チャットを並行して実行していることです。また、ObjectOutputStream または ObjectInputStream を開くと、デッドロックが発生することがあります。そして、私はあなたたちが私を助けることができると思います.

クライアントがサーバーに接続し、サーバーがオブジェクトであるランダムな単語をクライアントに送信するハングマン ゲームです。

サーバ:

        try{
            socketConexao = socketRecepcao.accept();

    toClient = new DataOutputStream(socketConexao.getOutputStream());
    fromClient = new BufferedReader(new InputStreamReader(socketConexao.getInputStream()));

            //starts the chat
    Thread chat = new Thread(this);
    chat.start();

    }catch(IOException e){}

           //i dont really know how to send the object

    try{
        byte[] bytes = serialize(palavraSorteada);
        toClient.write(bytes);
    } catch (IOException e){
        e.printStackTrace();
    }

クライアント:

    socketCliente = new Socket(ip, port);

    toServer = new DataOutputStream(socketCliente.getOutputStream());
    fromServer = new BufferedReader(new InputStreamReader(socketCliente.getInputStream()));

            // starts the chat
    Thread chat = new Thread(this);
    chat.start();

    }catch(IOException e){System.exit (0);}

            // and dont really know how to receive the object

    try{
        ObjectInputStream os = new ObjectInputStream(socket.getInputStream());
        palavraSorteada = (Palavra) os.readObject();
        os.close();
    }catch(Exception e){
        e.printStackTrace();
    }
4

2 に答える 2

1

ここで(あなたの説明から)何が問題なのかは明らかです。1つの通信チャネルを使用して、 2つの異なる種類のデータを送信します。受信側は何を受信するかを予測できないため、次に受信する情報を追加する必要があるため、受信側は何をすべきかを知ることができます。

そしておそらく、あなたのコードフラグメントが実際に何をしているのかを理解したり、質問したいことだけを簡潔にしたり、問題を示す1 つのクラスのコピー & ペースト可能な実行可能な例を (できるだけ短く) 作成したりするのに苦労する人はいないでしょう。

于 2012-09-24T12:46:03.170 に答える
0

Server で、クラス Server を Server (接続を受け入れる) と ServerConnection (別のスレッド) に分割します。変数 toClient および fromClient を ServerConnection に配置します。これで、新しいクライアントが接続したときにその変数が台無しになります。

クライアントでは、新しいスレッドを開始する必要はありません。

于 2012-09-24T12:46:03.417 に答える