Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java通过套接字接收对象_Java_Sockets_Object - Fatal编程技术网

Java通过套接字接收对象

Java通过套接字接收对象,java,sockets,object,Java,Sockets,Object,我正在为大学开发一款刽子手游戏。它需要通过套接字,服务器和客户端。现在游戏运行良好 但是当它由两个人播放,试图猜同一个单词时,我需要知道一个用户选择哪个字母,这样我就可以在另一个用户GUI上禁用该字母 因此,我试图发送一个id为的信件对象,该id将禁用另一侧的按钮,我首先发送一条消息,警告我将发送一个对象,因此我没有收到异常 但是它只读取我发送的前两个对象,在第三个对象上,我得到一个异常,名为java.io.StreamCorruptedException。有人知道为什么吗 Sendin

我正在为大学开发一款刽子手游戏。它需要通过套接字,服务器和客户端。现在游戏运行良好

但是当它由两个人播放,试图猜同一个单词时,我需要知道一个用户选择哪个字母,这样我就可以在另一个用户GUI上禁用该字母

因此,我试图发送一个id为的信件对象,该id将禁用另一侧的按钮,我首先发送一条消息,警告我将发送一个对象,因此我没有收到异常


但是它只读取我发送的前两个对象,在第三个对象上,我得到一个异常,名为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 */);
    }
}

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


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

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

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

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

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

请发布您得到的异常!提示:尝试只使用一种语言命名方法和对象,最好使用英语。副客户=葡萄牙人;fromServer=英语;我将尝试只使用ObjectInputStream和ObjectOutputStream,并使用instanceof来区分不同类型的对象(单词、字母和消息)。谢谢