我正在为大学开发一个刽子手游戏。它需要通过服务器和客户端的套接字。游戏现在运作良好。
但是当它由两个人玩时,试图猜出同一个词,我需要知道一个用户选择的字母,所以我可以在另一个用户GUI上禁用该字母。
所以,我正在尝试发送一个带有id的字母对象,该对象将禁用另一侧的按钮,我首先发送消息,警告我将发送一个对象,所以我没有得到一个异常。
Bur它只读取我发送的前两个对象,在第三个上我得到一个名为 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 */);
}
}
答案 0 :(得分:1)
我将使用的方法是将所有内容都作为对象,以便您只发送和接收对象。然后该对象将指示实际消息以及任何参数或参数或数据。
您正在读取线和获取对象之间混合。
答案 1 :(得分:1)
混淆的常见原因是您在同一个流上混合使用不同的流类型。
你有两个不同问题的好例子。
解决方案是使用一个,而且只使用一个,以满足您的需求并使用它。