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

这里的问题应该很明显(根据您的描述):您使用一个通信渠道发送两种不同类型的数据。由于接收端无法预测它会收到什么,您需要添加信息接下来会发生什么,因此接收端知道该做什么。

并且可能没有人会费心去弄清楚你的代码片段到底在做什么,将绒毛减少到你想要询问的内容,或者甚至更好地制作一个可以证明问题的一类可复制和可粘贴的可运行示例(尽可能短)。

于 2012-09-24T12:46:03.170 回答
0

In Server, split class Server in Server (accepts connections) and ServerConnection (separate thread). Place variables toClient and fromClient into ServerConnection. Now you spoil that variables when new client connects.

In Client, no need to start new Thread.

于 2012-09-24T12:46:03.417 回答