我有这个问题,我无法弄清楚什么是错的。我在互联网上搜索过,但没有成功。
所以,我必须通过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();
}
答案 0 :(得分:1)
这里的错误应该是相当明显的(根据您的描述):您使用一个通信渠道发送两个不同类型的数据。由于接收端无法预测接收到的内容,因此您需要添加接下来要发送的信息,因此接收端知道该怎么做。
也许没有人会弄清楚你的代码片段到底在做什么,减少你想要提出的问题,甚至更好地制作一个一个类副本和可粘贴的runnable示例(尽可能短)来证明这个问题。
答案 1 :(得分:0)
在Server中,拆分服务器中的服务器(接受连接)和ServerConnection(单独的线程)。将变量toClient和fromClient放入ServerConnection。现在,当新客户端连接时,你会破坏这些变量。
在客户端,无需启动新线程。