2012-09-25 72 views
1

我正在开发一个大学生hang子手游戏。它需要通过套接字,服务器和客户端。现在游戏运行良好。Java接收对象套接字

但是当它由两个人玩,试图猜测同一个单词时,我需要知道一个用户选择哪个字母,所以我可以在其他用户GUI上禁用该字母。

所以,我试图发送一个ID的对象,将禁用另一边的按钮,我先sendind消息,警告我会发送一个对象,所以我没有得到一个例外。

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

请发表您的异常! –

+0

提示:尝试仅使用一种语言为您的方法和对象命名,优先使用英语。 paraCliente =葡萄牙语; fromServer = English; –

+0

java.io.StreamCorruptedException – bfagundes

回答

1

我会使用的方法是将所有东西都当作一个对象,以便您只发送和接收对象。然后该对象将指示实际消息以及任何参数或参数或数据。

您正在混淆读取行和获取对象。

+0

我将尝试仅使用ObjectInputStream和ObjectOutputStream,并使用instanceof来区分不同类型的对象(单词,字母和消息)。谢谢。 – bfagundes

1

混淆的一个常见原因是在同一个流上混合不同的流类型。

你有两个不同问题的好例子。

  • 您不应在同一个流上使用多个流,例如DataOutptuStream和ObjectOutputStream
  • 您不应该混合二进制和文本流,例如BufferedReader和ObjectInputStream。

解决方案是使用一个,并且只有一个适合您的需求并使用它。