我无法通过Java中的套接字发送对象

时间:2012-09-24 12:32:24

标签: java sockets bytearray objectoutputstream objectinputstream

我有这个问题,我无法弄清楚什么是错的。我在互联网上搜索过,但没有成功。

所以,我必须通过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();
    }

2 个答案:

答案 0 :(得分:1)

这里的错误应该是相当明显的(根据您的描述):您使用一个通信渠道发送两个不同类型的数据。由于接收端无法预测接收到的内容,因此您需要添加接下来要发送的信息,因此接收端知道该怎么做。

也许没有人会弄清楚你的代码片段到底在做什么,减少你想要提出的问题,甚至更好地制作一个一个类副本和可粘贴的runnable示例(尽可能短)来证明这个问题。

答案 1 :(得分:0)

在Server中,拆分服务器中的服务器(接受连接)和ServerConnection(单独的线程)。将变量toClient和fromClient放入ServerConnection。现在,当新客户端连接时,你会破坏这些变量。

在客户端,无需启动新线程。